[python]:被super()搞糊涂了

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Understanding Python super()

Class B子类Class A,因此在B的__init__中,我们应该这样调用A的__init__:

1
2
3
class B(A):
    def __init__(self):
        A.__init__(self)

但在《yanan4》中,我看到了这样的东西:

1
2
3
class B(A):
    def __init__(self):
        super(B, self).__init__()  #or super().__init__()

我的问题是:

为什么不super(B, self).__init__(self) ?仅仅因为返回代理对象是一个绑定对象?

如果我省略了super中的第二个参数,并且返回的代理对象是一个未绑定的对象,那么我应该编写super(B).__init__(self)吗?


super()返回基类的一个实例,因此self像在任何其他方法调用中一样隐式传递给__init__()

关于第二个问题,你说得对。第二个参数在没有实例的情况下调用super()将返回对类本身的引用,而不是由子类实例构造的实例。