Python 多重继承

在 Python 中,一个可以从多个超类派生。这被称为多重继承

例如,一个类Bat派生自超类MammalWingedAnimal。这很合理,因为蝙蝠既是哺乳动物,也是有翼动物。

Multiple Inheritance
多重继承

Python 多重继承语法

class SuperClass1:
    # features of SuperClass1

class SuperClass2:
    # features of SuperClass2

class MultiDerived(SuperClass1, SuperClass2):
    # features of SuperClass1 + SuperClass2 + MultiDerived class

在这里,MultiDerived类派生自SuperClass1SuperClass2类。


示例:Python 多重继承

class Mammal:
    def mammal_info(self):
        print("Mammals can give direct birth.")

class WingedAnimal:
    def winged_animal_info(self):
        print("Winged animals can flap.")

class Bat(Mammal, WingedAnimal):
    pass

# create an object of Bat class
b1 = Bat()

b1.mammal_info()
b1.winged_animal_info()

输出

Mammals can give direct birth.
Winged animals can flap.

在上面的示例中,Bat类派生自两个超类:MammalWingedAnimal。请注意以下语句:

b1 = Bat()
b1.mammal_info()
b1.winged_animal_info()

在这里,我们使用b1Bat的对象)来分别访问Mammal类和WingedAnimal类的mammal_info()winged_animal_info()方法。


Python 多层继承

在 Python 中,我们不仅可以从超类派生类,还可以从派生类派生类。这种形式的继承称为多层继承

这是多层继承的语法:

class SuperClass:
    # Super class code here

class DerivedClass1(SuperClass):
    # Derived class 1 code here

class DerivedClass2(DerivedClass1):
    # Derived class 2 code here

在这里,DerivedClass1类派生自SuperClass类,而DerivedClass2类派生自DerivedClass1类。

Multilevel Inheritance in Python
Python 中的多层继承

示例:Python 多层继承

class SuperClass:

    def super_method(self):
        print("Super Class method called")

# define class that derive from SuperClass
class DerivedClass1(SuperClass):
    def derived1_method(self):
        print("Derived class 1 method called")

# define class that derive from DerivedClass1
class DerivedClass2(DerivedClass1):

    def derived2_method(self):
        print("Derived class 2 method called")

# create an object of DerivedClass2
d2 = DerivedClass2()

d2.super_method()  # Output: "Super Class method called"

d2.derived1_method()  # Output: "Derived class 1 method called"

d2.derived2_method()  # Output: "Derived class 2 method called"

输出

Super Class method called
Derived class 1 method called
Derived class 2 method called

在上面的例子中,DerivedClass2派生自DerivedClass1,而DerivedClass1又派生自SuperClass

这意味着DerivedClass2继承了DerivedClass1SuperClass的所有属性和方法。

因此,我们使用d2DerivedClass2的对象)来调用SuperClassDerivedClass1DerivedClass2中的方法。


Python 中的方法解析顺序(MRO)

如果两个超类具有相同的方法(函数)名称,并且派生类调用该方法,Python 将使用 MRO 来查找要调用的正确方法。例如:

class SuperClass1:
    def info(self):
        print("Super Class 1 method called")

class SuperClass2:
    def info(self):
        print("Super Class 2 method called")

class Derived(SuperClass1, SuperClass2):
    pass

d1 = Derived()
d1.info()  

# Output: "Super Class 1 method called"

在这里,SuperClass1SuperClass2这两个类都定义了一个info()方法。

因此,当使用Derived类的d1对象调用info()时,Python 使用MRO来确定要调用哪个方法。

在这种情况下,MRO指定方法应首先从最左边的超类继承,因此调用SuperClass1info(),而不是SuperClass2的。


另请阅读

你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战