Python super()链没有推进

时间:2016-01-19 16:41:28

标签: python python-3.x multiple-inheritance

Python新手在这里,会欣赏一些多重继承的帮助!

考虑以下类层次结构:

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()

我原以为这会输出打印出层次结构中涉及的所有类的名称,但事实并非如此。此外,如果我向super().display()Base1添加Base2,我会收到错误AttributeError: 'super' object has no attribute 'display'

出了什么问题?

1 个答案:

答案 0 :(得分:2)

Base1Base2隐式继承自object的{​​{1}}方法。这解释了display例外。

此代码的输出应为:

AttributeError: 'super' object has no attribute 'display'

从多个类继承时,在调用Base1 Derived1 Derived 时,会从左到右搜索属性。因此,在super上找到display,因此在方法解析期间不会查看Derived1。有关详细信息,请参阅this question