python3中的super()怪异

2024-09-29 23:20:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道这个问题以前已经讨论过很多次了,但从来没有人解释过“幕后黑手”到底发生了什么。在

有谁能提供一个详细的解释,为什么在最后一行代码中注释会引起错误?我知道那个对象。不接受任何参数,但是为什么代码在行被注释掉的时候工作呢?在

class A:
   def __init__(self, a):
      print("A constructor")
      super().__init__(a)
      self.a = a
      print("A constructor end")

class B:
   def __init__(self, b):
      print("B constructor")
      super().__init__()
      self.b = b
      print("B constructor end")


class C(A, B):
   def __init__(self, x):
      super().__init__(x)


c = C(42)
#a = A(33)

Tags: 对象代码self参数initdef错误class
1条回答
网友
1楼 · 发布于 2024-09-29 23:20:55

在python3中,每个方法都成为一个闭包,并为定义的“当前类”添加一个隐藏值。它由super()(不带参数)访问。在

Super返回一个使用类的方法解析顺序(MRO)的对象,对于C实例,A后面有B

如果在MRO中找不到B,A中的super().__init__将调用对象.\uu init_u,您无法向其传递任何参数。在

您可以通过查看SomeClass来查看某个类的MRO。在

虽然主要讨论的是2.x,但您可能想阅读http://fuhm.net/super-harmful/。在

相关问题 更多 >

    热门问题