python 面向对象

面向对象的三大特性

1. 封装
   把很多数据封装到⼀个对象中. 把固定功能的代码封装到⼀个代码块,(例如: 写一个函数, 一个类) 打包成模块. 这都属于封装的思想.
2.继承
   ⼦类可以⾃动拥有⽗类中除了私有属性外的其他所有内容, 但必须先要声明父类, 子类才能继承.  
3.多态
   同一个变量, 可以有多种形态,例如: 定义一个变量: a = 2, a也可以定义成字符串: a = 'hello word'

多继承,以及执行顺序

 在新式类中查找父类方法或属性,查找方式为广度优先, 其中类的mro()方法可以查看类的继承顺序. 继承分类: 单继承和多继承

单继承

class Animal(object):
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def eat(self):
        return f'{self.name} has attribute'


class Cat(Animal):
    def __init__(self, name, age, sex):
        self.name = name
        self.age = age
        self.sex = sex

    def run(self):
        return f'{self.name} can run'

if __name__ == '__main__':
     #实例化对象时必须执行__init__方法,类中没有,从父类找,父类没有,从object类中找。
     #python3中使⽤的都是新式类. 如果基类谁都不继承. 那这个类会默认继承 object
     a = Cat('Tom', 4, 'm')
     print(a.name)
     print(a.eat())

多继承

class Aobject():
    def __init__(self):
        print(' excute Aobject')


class Bobject():
    def __init__(self):
        print(' excute Bobject')


class Cobject(Aobject, Bobject):
    pass


if __name__ == '__main__':
    
    print(Cobject.mro())
    #执行顺序: [<class '__main__.Cobject'>, <class '__main__.Aobject'>, <class '__main__.Bobject'>, <class 'object'>]
    #继承顺序: Aobject - > Bobject
钻石继承顺序

class Aobject():
    def __init__(self):
        print(' excute Aobject')
    def func(self):
        print('excute Aobject func')


class Bobject(Aobject):
    def __init__(self):
        print(' excute Bobject func')


class Cobject(Aobject):
    def func(self):
        print('excute Cobject func')


class Dobject(Bobject, Cobject):
    def __init__(self):
        print('excute Dpbject')


if __name__ == '__main__':
    
    """
     钻石继承, Bobject, Cobject继承Aobject, Dobject 继承: Bobject, Cobject
     Dobject 先从Bobject 找func, 没有找到, 继续从 Cobject 找. 找到了, 就不往下找了, 如果找不到, 就找Aobject, 如果Aobject没有, 就会找object
    """
   
    Dobject().func()
    print(Dobject.mro())

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值