[python]: 被super()搞糊涂了
可能重复的问题:
理解Python中的super()
类 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)
吗?
1 个回答
5
super()
会返回一个基类的实例,所以在调用 __init__()
方法时,self
会像其他方法调用一样自动传进去。
关于你的第二个问题,没错。如果你在调用 super()
时没有把实例作为第二个参数传进去,它返回的就是类本身的引用,而不是从你的子类实例构造出来的一个实例。