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

5 投票
1 回答
1385 浏览
提问于 2025-04-17 00:02

可能重复的问题:
理解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 个回答

5

super() 会返回一个基类的实例,所以在调用 __init__() 方法时,self 会像其他方法调用一样自动传进去。

关于你的第二个问题,没错。如果你在调用 super() 时没有把实例作为第二个参数传进去,它返回的就是类本身的引用,而不是从你的子类实例构造出来的一个实例。

撰写回答