python 2和3如何处理继承问题?

时间:2019-07-12 06:16:59

标签: python

为什么在python 2和python 3中代码输出不同?

class A:
    def m(self):
        print("m of A called")

class B(A):
    pass

class C(A):
    def m(self):
        print("m of C called")

class D(B,C):
    pass

x = D()
x.m()

实际输出:

$ python  diamond1.py     //python 2 used for the code 
m of A called

$ python3 diamond1.py     //python 3 used for the code
m of C called

有人能说出调用方法(方法m)的方式(调用顺序)以及为什么在python 2和python 3中实现的区别吗?

1 个答案:

答案 0 :(得分:2)

差异是特定于Python 2的,与旧样式类和新样式类有关(Python 3仅具有后者)。特别是,这两种样式使用不同的方法解析顺序。

有关更多信息,请参见https://wiki.python.org/moin/NewClassVsClassicClass

如果您这样更改代码:

class A(object):

您将获得一致的行为,因为它将使所有内容都成为新型样式。

仅存在旧类,以便与Python 2.1及更早版本(我们说的是2001年)兼容。