为什么在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中实现的区别吗?
答案 0 :(得分:2)
差异是特定于Python 2的,与旧样式类和新样式类有关(Python 3仅具有后者)。特别是,这两种样式使用不同的方法解析顺序。
有关更多信息,请参见https://wiki.python.org/moin/NewClassVsClassicClass
如果您这样更改代码:
class A(object):
您将获得一致的行为,因为它将使所有内容都成为新型样式。
仅存在旧类,以便与Python 2.1及更早版本(我们说的是2001年)兼容。