美文网首页
新式类、经典类

新式类、经典类

作者: 好小葱1 | 来源:发表于2019-10-12 10:37 被阅读0次

继承 object 类的是新式类,不继承 object 类的是经典类,在 Python 2.7 里面新式类和经典类在多继承方面会有差异:

class A:
    def foo(self):
        print('called A.foo()')

class B(A):
    pass

class C(A):
    def foo(self):
        print('called C.foo()')

class D(B, C): 
    pass

if __name__ == '__main__':
    d = D() 
    d.foo()

B、C 是 A 的子类,D 多继承了 B、C 两个类,其中 C 重写了 A 中的 foo() 方法。如果 A 是经典类(如上代码),当调用 D 的实例的 foo() 方法时,Python 会按照深度优先的方法去搜索 foo() ,路径是 B-A-C ,执行的是 A 中的 foo() ;如果 A 是新式类,当调用 D 的实例的 foo() 方法时,Python 会按照广度优先的方法去搜索 foo() ,路径是 B-C-A ,执行的是 C 中的 foo() 。因为 D 是直接继承 C 的,从逻辑上说,执行 C 中的 foo() 更加合理,因此新式类对多继承的处理更为合乎逻辑。在 Python 3.x 中的新式类貌似已经兼容了经典类,无论 A 是否继承 object 类, D 实例中的 foo() 都会执行 C 中的 foo() 。但是在 Python 2.7 中这种差异仍然存在,因此还是推荐使用新式类,要继承 object 类。

作者:邹冲
链接:https://www.zhihu.com/question/19754936/answer/202650790
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

相关文章

  • 新式类与经典类

    新式类:继承于object的类都是新式类。 经典类:不是继承object的类都是经典类 在多继承中,新式类采用广度...

  • python super用法 2018-01-28

    新式类,经典类 python3之后均称为新式类,默认继承object类 Python2.x版本分为:分新式类与经典...

  • 新式类、经典类

    继承 object 类的是新式类,不继承 object 类的是经典类,在 Python 2.7 里面新式类和经典类...

  • 请简述python 经典类和新式类的区别?

    Python中类分为两种:经典类和新式类: 新式类都从object继承,经典类不需要。 新式类的MRO算法曹勇c3...

  • 新式类和旧式类区别

    Python中类分两种:旧式类和新式类:➤新式类都从object继承,经典类不需要。 ➤新式类的MRO(metho...

  • Python多继承的执行顺序

    经典类和新式类的写法: class A: #经典类(旧式类)写法..................clas...

  • Python新式类的方法解析顺序MRO与Super

    新式类与经典类的方法解析顺序 MOR(方法解析顺序) 经典类:深度优先 DFS python3以前 新式类:广度优...

  • Python 类

    新式类和旧式类 在python2.x的版本中,有“新式类”和“旧式类(也叫做经典类)”之分。新式类是python2...

  • Python 中的新式/经典类

    Python 新式/经典类 新式/经典类的区别从Python2.2开始,Python 引入了 new style ...

  • python中的新式类和经典类简析

    Python新式类与经典类的区别 1.新式类与经典类 在Python 2及以前的版本中,由任意内置类型派生出的类(...

网友评论

      本文标题:新式类、经典类

      本文链接:https://www.haomeiwen.com/subject/lwtqmctx.html