【发布时间】:2019-07-09 04:40:40
【问题描述】:
我是 python 新手。我正在使用python 2.7。我正在使用一个小的 sn-p 进行方法顺序解析,如下所示:
class A(object):
attr = 'A'
class B(A):
pass
class C(A):
attr = 'C'
class D(B,C):
pass
x = D()
print x.attr
分辨率的顺序是x,D,B,C,A,因此输出是C。按照上面的例子,我对代码做了一点改动。
class A(object):
attr = 'A'
class E(object):
attr = 'E'
class B(A):
pass
class C(E):
attr = 'C'
class D(B,C):
pass
x = D()
print x.attr
按照我之前的示例,我希望顺序是 x、D、B、C、A、E。令我惊讶的是,输出是“A”。因此,我对新式课程的解决顺序感到困惑。有人可以澄清在 C 课之前何时访问 B 的父母。谢谢。
【问题讨论】:
-
您可以查看 MRO,例如:
print(D.__mro__) -
如果您是 Python 新手,请使用 Python3 pythonclock.org
-
Python 2 “新”样式类在 Python 3 中的工作方式相同。但此时尝试 Python 2 几乎是浪费时间。 Python2 几乎走到了生命的尽头——只需使用 Python 3 进行研究和实验(当然还有项目)。
标签: python method-resolution-order python-mro