我无法理解super
这里的术语用法?它是一个类或函数还是其他什么?
从下面的代码:
class Child(SomeBaseClass):
def __init__(self):
super(Child, self).__init__()
有人可以解释下面这行代码吗?
super(Child, self).__init__()
我无法理解super
这里的术语用法?它是一个类或函数还是其他什么?
从下面的代码:
class Child(SomeBaseClass):
def __init__(self):
super(Child, self).__init__()
有人可以解释下面这行代码吗?
super(Child, self).__init__()
super(Child, self).__init__() <=> SomeBaseClass.__init__(self)
它为调用父类上的方法提供了一个很好的简写,而无需显式键入它,这可能很长(程序员很懒)并且容易出错。如果您稍后更改代码,不再Child
是 aSomeBaseClass
而是 a AnotherBaseClass
,则不必更改对构造函数的调用(这本身是必需的,因为默认情况下不会调用它)
请注意,这里的情况很明显,因为只有一个基类,但如果存在歧义(例如两个或更多父类),mro 占上风(正如您所期望的那样,因为这就是它的意义所在) :
>>> 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
__init__()
是python中的构造函数,并且super
是您从中继承类的父类。
class Child(SomeBaseClass):
def __init__(self):
super(Child, self).__init__()
对于此代码,每当您对类型的新对象感到不满时,Child
它都会调用其构造函数,而构造函数__init__()
又会调用SomeBaseClass.__init__().
super(Child, self).__init__()
意思是:用实例调用__init__
基类型的方法。所以在你的情况下,这将相当于. 但是 using可以避免再次显式命名基类型,并且也适用于多重继承。Child
self
SomeBaseClass.__init__(self)
super
所以super(t, self)
基本上意味着获取 type 的基本类型t
,并将其绑定到实例self
,以便您可以直接调用方法。
请注意,在 Python 3 中,参数 tosuper()
是可选的,因此super().__init__()
有效。