小编Flo*_*nne的帖子

为什么 super() 继承了“错误”的类?

我正在查看钻石问题并得到一个问题:


class A:
    def __init__(self):
        print("This is class A")

class B(A):
    def __init__(self):
        print("This is class B")
        super().__init__()

class C(A):
    def __init__(self):
        print("This is class C")
        super().__init__()

class D(B, C):
    def __init__(self):
        print("This is class D")
        super().__init__()


i = D()

Run Code Online (Sandbox Code Playgroud)
This is class D
This is class B
This is class C
This is class A
Run Code Online (Sandbox Code Playgroud)

它按预期工作,这很好,但我想知道为什么super().__init__()inclass B不去class A而是 C 被调用。

如果一个类有一个 super() 并且它继承自一个父类,它应该去那里。

如果我在 B 上删除它,代码将不会到达 C 或 A。

我知道 MRO 以及它是如何按预期进行的:

>>> …
Run Code Online (Sandbox Code Playgroud)

python super diamond-problem

2
推荐指数
1
解决办法
80
查看次数

标签 统计

diamond-problem ×1

python ×1

super ×1