python super()链未前进chain not advancing

Python super() chain not advancing

本问题已经有最佳答案,请猛点这里访问。

这里是python新手,非常感谢您对多重继承的帮助!

考虑以下类层次结构:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class Base1:
    def display(self):
        print('Base1')

class Base2:
    def display(self):
        print('Base2')

class Derived1 (Base1):
    def display(self):
        super().display()
        print('Derived1')

class Derived2 (Base2):
    def display(self):
        super().display()
        print('Derived2')

class Derived (Derived1, Derived2):
    def display(self):
        super().display()
        print('Derived')

Derived().display()

我本来以为它的输出会打印出层次结构中涉及的所有类的名称,但事实并非如此。此外,如果我在Base1Base2中加上super().display(),就会得到错误AttributeError: 'super' object has no attribute 'display'

发生了什么?


Base1Base2隐式继承自没有display方法的object。这就解释了AttributeError: 'super' object has no attribute 'display'例外。

此代码的输出应为:

1
2
3
Base1
Derived1
Derived

当从多个类继承时,当调用super时,从左到右搜索属性。因此,在Derived1上发现display,因此在方法解析过程中不观察Derived2。有关详细信息,请参阅此问题。