1
6
这不是一个新旧风格混合的问题。super()不调用 全部的 基类函数,它调用根据方法解析顺序找到的第一个基类。在本例中,a2又称a。 如果要同时调用两者,请明确执行以下操作:
这应该能解决问题。 更新: 您提到的钻石继承问题是在钻石继承情况下调用哪个类的问题,如下所示:
现在测试一下:
这是正确的。它调用第一个类的实现。 不过,让我们用method2来尝试一下:
欧普斯,错了!它应该在这里调用类c.method2(),因为即使类b不重写method2,类c也会重写method2。现在让A级成为新闻类:
然后再试一次:
嘿,普雷斯托,成功了。这是新样式类和旧样式类之间的方法解析顺序差异,有时将它们混合会使人感到困惑。 注意b和c在任何时候都不会被调用。这是真的,即使我们称之为超级。
如果要同时调用b和c,则必须显式调用两者。 现在,如果你像在你的例子中那样将钻石分开,结果就不同了:
这也是每个设计。仍然没有两个基类被调用。如果你想这样做,你仍然需要显式地调用两者。 |
Silverspur · “X是Y的模糊基”:多重继承噩梦 7 年前 |
Aedoro · 扩展多个类的C++函数参数 7 年前 |
user6022430 · Python3.4多重继承调用特定构造函数 8 年前 |
Mark van der Wilk · 用于重写继承方法的Mixin 8 年前 |
pasha · 是否可以为复制基的虚拟函数提供不同的定义? 8 年前 |
Daniel · 如何使继承从父类到子类python34起作用 9 年前 |