本问题已经有最佳答案,请猛点这里访问。
我不明白
代码如下:
1 2 3 | class Child(SomeBaseClass): def __init__(self): super(Child, self).__init__() |
有人能解释一下下面这行代码吗?
1 | super(Child, self).__init__() |
1 | super(Child, self).__init__() <=> SomeBaseClass.__init__(self) |
它为调用父类上的方法提供了一个很好的简写,而不需要显式地输入它,这可能很长(程序员很懒),而且容易出错。如果稍后更改代码,使
注意,这里的情况很明显,因为只有一个基类,但如果存在歧义(例如两个或多个父类),mro就会占上风(正如您所期望的那样,我认为,因为这就是它的内容):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | >>> class A(object): ... def __init__(self): ... print"A" ... >>> class B(object): ... def __init__(self): ... print"B" ... >>> class C(A, B): ... def __init__(self): ... super(C, self).__init__() ... print"C" ... >>> c = C() A C >>> class D(B, A): ... def __init__(self): ... super(D, self).__init__() ... print"D" ... >>> d = D() B D >>> class CC(A, B): ... def __init__(self): ... B.__init__(self) # Explicitely call B and not A ! ... print"CC" ... >>> cc = CC() B CC |
1 | super(Child, self).__init__() |
方法:使用实例
因此
注意,在python3中,到
1 2 3 | class Child(SomeBaseClass): def __init__(self): super(Child, self).__init__() |
对于这段代码,每当您贪得无厌