类B
是类A
的子类,因此在B __init__
中我们应该像这样调用A __init__
:
class B(A):
def __init__(self):
A.__init__(self)
但是super()
,我看到了这样的事情:
class B(A):
def __init__(self):
super(B, self).__init__() #or super().__init__()
我的问题是:
为什么不super(B, self).__init__(self)
?仅仅因为返回代理对象是绑定的?
如果我在super中省略第二个参数并且返回代理对象是未绑定的,那么我应该写super(B).__init__(self)
吗?
答案 0 :(得分:5)
super()
返回基类的实例,因此self
会像任何其他方法调用一样隐式传递给__init__()
。
关于你的第二个问题,这是正确的。在没有实例的情况下调用super()
作为第二个参数将返回对类本身的引用,而不是从子类实例构造的实例。