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

时间:2011-08-21 04:41:16

标签: python super

  

可能重复:
  Understanding 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__()

我的问题是:

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

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

1 个答案:

答案 0 :(得分:5)

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

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