我知道这个问题以前已经讨论过很多次了,但从来没有人解释过“幕后黑手”到底发生了什么。在
有谁能提供一个详细的解释,为什么在最后一行代码中注释会引起错误?我知道那个对象。不接受任何参数,但是为什么代码在行被注释掉的时候工作呢?在
class A:
def __init__(self, a):
print("A constructor")
super().__init__(a)
self.a = a
print("A constructor end")
class B:
def __init__(self, b):
print("B constructor")
super().__init__()
self.b = b
print("B constructor end")
class C(A, B):
def __init__(self, x):
super().__init__(x)
c = C(42)
#a = A(33)
在python3中,每个方法都成为一个闭包,并为定义的“当前类”添加一个隐藏值。它由
super()
(不带参数)访问。在Super返回一个使用类的方法解析顺序(MRO)的对象,对于C实例,A后面有B
如果在MRO中找不到B,A中的
super().__init__
将调用对象.\uu init_u,您无法向其传递任何参数。在您可以通过查看SomeClass来查看某个类的MRO。在
虽然主要讨论的是2.x,但您可能想阅读http://fuhm.net/super-harmful/。在
相关问题 更多 >
编程相关推荐