十一、面向对象

面向对象

类的好处

之前我们学过了函数,函数的好处是,把功能封装起来,以便我们后边可以随时的调用,但是这些都可以说是面向过程变成,他注重的是结果,而我们今天所讲的面向对象它更注重程序的过程,比方说我们现在有一个人走在一条长达一千米的公路上,如果他的行走速度为两米每秒,那他需要多长时间呢?如果用面向过程来解释的话那就直接用1000/2,我们就可以得到结果了,但是如果我们用面向对象来解释的话,我们可以在程序中创建一条长达1000米的公路,然后再创建一个人,设置它的行走速度为两米每秒,然后让程序去运算它会走多少时间,它更加注重过程了,这就是面向对象!

面向对象有三大特征,封装,继承,多态

封装

我们把乱七八糟的数据都放到一个列表当中,这是一种封装,但是这是属于数据层面的封装,我们还可以把常用的代码段打包成一个函数,这是语句的封装,咱们今天学的面向对象就是这两种的合一。对象是模拟真实世界,把数据和代码都封装到一起,为什么说对象是对真实世界的封装呢,一会我们就可以感受到了。封装更是一种信息隐蔽技术,让我们的数据更加安全,比如说:列表,列表是Python的一个序列对象,那我们需要对里边的数据进行数据排序,我们怎么做呢?那咱们不由自主的就想起来用到sort方法,那我们提到了方法二字,没错,python的列表事实上就是一个对象,提供了诺干种方法,供我们根据需求调整列表,但是咱们知道列表对象里边的这些方法是怎么实现的吗?必然不知道!我们知道列表对象里边有哪些变量么?必然也不知道!这就是所谓的封装,它封装起来,只给我们每个方法的名字,当咱们需要用到这个方法的时候,直接调用这个名字就可以了。那他具体怎么实现的有没有告诉我们?----没有。OK!这就是封装。

继承

继承,就是子类自动共享父类之间数据和方法的机制,比如说我们随便先定义一个类,然后我们让他继承list,下边我们用Pass代替,也就是说我们不做任何事情,只是继承list,然后我们把这个类实例化出来,那么我们这个类也就有了List的所有方法,这就是继承

class MyList(list):
    pass

# 实例化对象
list1 = MyList()

list1.append(5)
list1.append(6)
print(list1)

多态

多态就是一个父类有多种具体实现各不相同的子类形态,这就是多态,所以有了继承和多态我们就可以实现大规模的复用,这就是面向对象的好处。

"""
需求:
1、封装一个Person类,
2、封装一下属性:姓名、年龄、存款,
3、封装自我介绍的方法,陈述以上属性,
4、创建一个人,设置基本信息,
5、打印此人信息,
6、令此人进行自我介绍。
"""
# 所有的类都继承于 object 类
class Person:
    # 类属性
    name = "韩梅梅"
    age = 18
    rmb = 20
    # 构造方法:在实例化的时候自动被调用
    def __init__(self,name,age,rmb):
        self.name = name
        self.age = age
        self.rmb = rmb

    # 析构方法:在程序结束的时候自动被调用
    # def __del__(self):
    #     print("__del__:我被调用了!",self.name)
    # 方法
    def tell(self):
        # name = "韩梅梅"
        # age = 18
        # rmb = 20
        print("我叫%s,我今年%s岁了,我有存款%.2f万元"%(self.name,self.age,self.rmb))

# 创建一个人
p = Person("小明",16,10)
p.tell()

p1 = Person("小红",16,11)
p1.tell()
"""
下边我们再来看一个需求:
1、为存款信息添加保护,使其不能直接被访问
2、添加设置密码功能
3、添加存款查询功能,只有输入密码正确的情况下才能查询存款信息
"""
class Person:

    def __init__(self,name,age,rmb):
        # 公有属性
        self.__name = name
        self.age = age
        # 私有属性  不能被直接访问  通过公有方法访问私有属性
        self.__rmb = rmb

    # 公有方法
    def getrmb(self):
        pwd = input("请输入查询密码:")
        if pwd == "123":
            print("我有存款%.2f万元"%(self.__rmb))
        else:
            print("您没有访问权限!")

    # 私有方法  不能直接被访问  通过公有方法访问私有方法
    # def __setrmb(self,rmb):
    #     self.__rmb = rmb

    # def setrmb(self,rmb):
    #     pwd = input("请输入设置密码:")
    #     if pwd == "456":
    #         self.__rmb = rmb
    #         print(self.__rmb)
    #     else:
    #         print("没有设置权限!")

if __name__ == '__main__':
    p = Person("韩梅梅",18,20)
    # print(p.__rmb)

    # p.setrmb(1)
    # p.getrmb()

    # p.name = "小明"
    # print(p.name)

    # p.setrmb(10)
"""
1、封装英雄类用以存储英雄的信息
2、英雄拥有人的一切正常属性和功能
3、英雄有英雄属性和英雄方法
4、创建一个英雄,为他设置最基本信息
5、让他做好事
"""
from class11.person import Person
class hero(Person):

    def __init__(self,name,age,rmb,courageous_acts):
        # 拓展父类属性
        super().__init__(name,age,rmb)
        # self.name = name
        # self.age = age
        # self.rmb = rmb
        self.courageous_acts = courageous_acts

    # 父类方法重写
    # def tell(self):
    #     print("劳资乃%s,今年%s岁了,劳资有存款%.2f万元,劳资就是喜欢%s"%
    #               (self.name,self.age,self.rmb,self.badhobby))

    # 方法拓展
    # def tell(self):
    #     super().tell()
    #     print("劳资乃%s,今年%s岁了,劳资有存款%.2f万元,劳资就是喜欢%s"%
    #           (self.name,self.age,self.rmb,self.badhobby))

    # def talk(self):
    #     print("劳资乃%s,今年%s岁了,劳资有存款%.2f万元,劳资就是喜欢%s"%
    #           (self.name,self.age,self.rmb,self.badhobby))

if __name__ == '__main__':
    b = hero("钟南山",84,20000,"救新冠肺炎患者")
    b.tell()
    # b.talk()
"""
需求:
1、封装男人类,继承于person类
2、封装女人类,继承于person类
3、封装gongong类,使之同时具有男人和女人的特性
4、令其咆哮,令其撒娇
5、令其偏阳刚的进行自我介绍,令其偏阴柔的进行自我介绍
"""
from class11.person import Person
class Man(Person):

    def tell(self):
        print("劳资乃%s,今年%s岁了,劳资有存款%.2f万元"%
              (self.name, self.age, self.rmb))

    def paoxiao(self):
        print("嗷~~,老子天下第一!")

class Women(Person):

    def talk(self):
        print("小女子%s,小女今年%d了,小女有存款%.2f万元!" %
              (self.name, self.age, self.rmb))

    def sajiao(self):
        print("讨厌了啦!")

class Gonggong(Women,Man):
    pass

# m = Man("史泰龙",50,3000)
# m.tell()
# m.paoxiao()
#
# w = Women("梦露",16,0.1)
# w.tell()
# w.sajiao()

g = Gonggong("李连英",45,10000000)
g.tell()
g.talk()
g.paoxiao()
g.sajiao()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值