有人知道下面的代码意味着什么super(xxx, self).__init__()吗?它有什么作用?我虽然它应该是 ABC 类继承自其他类,但我没有看到继承自哪个类。
class ABC:
def __init__(self):
super(ABC, self).__init__()
Run Code Online (Sandbox Code Playgroud)
super与类的方法解析顺序 (MRO) 一起使用。MRO始终至少包含两个类:类本身和object(因为所有类都隐式继承自object)
>>> class ABC: pass
...
>>> ABC.__mro__
(<class '__main__.ABC'>, <class 'object'>)
Run Code Online (Sandbox Code Playgroud)
如果class语句中有任何明确命名的基类,这些基类及其基类将出现在 MRO 中新类和object.
>>> class ABC(str): pass
...
>>> ABC.__mro__
(<class '__main__.ABC'>, <class 'str'>, <class 'object'>)
Run Code Online (Sandbox Code Playgroud)
关于您的问题“为什么super?”,请考虑以下标准示例:
class A:
def foo(self):
print("A")
class B(A):
def foo(self):
super().foo()
print("B")
class C(A):
def foo(self):
super().foo()
print("C")
class D(B, C):
def foo(self):
super().foo()
print("D")
Run Code Online (Sandbox Code Playgroud)
的 MROD是(D, B, C, A)。请注意该呼叫super().foo在B.foo。展望只在类B,你可能会认为super().foo()是一个呼叫A.foo。但是 whenself是 的一个实例D(例如 的情况D().foo()), thensuper指的是C,而不是A,因为在 MRO 中C紧随其后B。
>>> D().foo()
A
C
B
D
Run Code Online (Sandbox Code Playgroud)
foo以相反的顺序输出 MRO 中的类(sans object;A不使用,super因为A“引入”foo到层次结构中),从最少到最具体。
| 归档时间: |
|
| 查看次数: |
381 次 |
| 最近记录: |