二十五.面向对象(经典类和新式类)

Posted sup-to

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二十五.面向对象(经典类和新式类)相关的知识,希望对你有一定的参考价值。

经典类和新式类

技术图片

class A(object):
    pass

class B(A):
    pass

class C(B):
    pass

class D(object):
    pass

class E(D,C):
    pass

class F(object):
    pass

class G(F):
    pass

class H(C,G):
    pass

class Foo(E,H):
    pass

# a1=Foo()
print(Foo.__mro__)
# (<class ‘__main__.Foo‘>, <class ‘__main__.E‘>, <class ‘__main__.D‘>, <class ‘__main__.H‘>, <class ‘__main__.C‘>, <class ‘__main__.B‘>, <class ‘__main__.A‘>, <class ‘__main__.G‘>, <class ‘__main__.F‘>, <class ‘object‘>)
L(E)=E,D,C,B,A,object
L(H)=H,C,B,A,G,F,object
Foo=(object)+(G,F,object)
Foo ,E,D,H,C,B,A,G,F,object

经典类和新式类
   py2:
      经典类
      新式类   如果自己或自己的前辈只要有人继承object 那么此类就是新式类

   py3:
      新式类

      经典类 和新式类的查找成员的顺序不一样

      经典类 :一条道路走到黑 (深度优先)

      新式类 : c3算法实现  广度优先

      Foo+ (C,D,F,G)+(G,D,G,W)+(I,G,D,W)

      Foo I  B

      获取 第一个表头  和 其他表尾进行比较
             不存在   则拿走
             如果存在 则放弃 然后获取第二个表的表头 再次和其他表的表尾进行比较

      注意事项

          super 是遵循__mro__执行顺序

 新式类py3

 技术图片

 

以上是关于二十五.面向对象(经典类和新式类)的主要内容,如果未能解决你的问题,请参考以下文章

python面向对象编程

面向对象进阶

Python面向对象-3.定义类创建对象

python--面向对象

面向对象新式类和旧式类的区别

python------面向对象介绍之经典类与新式类的继承顺序