Python从入门到精通-----------经典类与新式类

继承object类的就是新式类
不继承object类的就是新式类

Python3 所有的类都继承object类,都是新式类
在python2中 不继承object的类都是经典类
      继承object类的就是新式类了

经典类:在Python3中不存在,在Python2中不主动继承object类
在python2中
class A:pass    # 经典类
class B(object):pass #新式类
在python3中
class A:pass    # 新式类
class B(object):pass #新式类

因为现在使用Python2的人不多了所以我们对于经典类不做过多讨论

我们只需要知道在多继承中经典类的继承顺序是遵循深度优先的

而新式类在继承中是广度优先的

深度优先-->在经典类中遵循深度优先(下一个点总是在继承的时候深度优先)

如 d继承c和b c和b 继承a

那么 d的继承顺序是d->c->a->b的

这样的继承顺序我们称之为深度优先

广度优先***-->在新式类中遵循宽度优先(下一个点总是在继承的时候既可以宽度或者广度优先)

class A:
    def func(self):
        print('A')
class B(A):
    def func(self):
        print('B')
class C(A):
    def func(self):
        print('C')
class D(C,B):
    def func(self):
        print('D')

d = D()
d.func()

 

当我将D类的funck方法注释掉后会出现C类的funck方法
当我注释掉C的时候如果是(新式类)就会先继承B类的funck方法
然后继承A类的funck方法

这个只是在广式优先中比较简单的多继承关系

广式优先是遵循c3算法的,而c3算法过于复杂我就不多赘述了,

当我们要处理比价复杂的广式优先的多继承关系的时候我们可以使用 对象.mro()来查看父类

方法.mro() 来查看广度优先

只存在于新式类中

class A:
    def func(self):
        print('A')
class B(A):
    def func(self):
        print('B')
class C(A):
    def func(self):
        print('C')
class D(C,B):
    def func(self):
        print('D')

d = D()
d.func()

print(D.mro())

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值