在 Python 中,一个类可以从多个超类派生。这被称为多重继承。
例如,一个类Bat
派生自超类Mammal
和WingedAnimal
。这很合理,因为蝙蝠既是哺乳动物,也是有翼动物。

Python 多重继承语法
class SuperClass1:
# features of SuperClass1
class SuperClass2:
# features of SuperClass2
class MultiDerived(SuperClass1, SuperClass2):
# features of SuperClass1 + SuperClass2 + MultiDerived class
在这里,MultiDerived
类派生自SuperClass1
和SuperClass2
类。
示例: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类派生自两个超类:Mammal和WingedAnimal。请注意以下语句:
b1 = Bat()
b1.mammal_info()
b1.winged_animal_info()
在这里,我们使用b1(Bat的对象)来分别访问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类。

示例: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继承了DerivedClass1和SuperClass的所有属性和方法。
因此,我们使用d2(DerivedClass2的对象)来调用SuperClass、DerivedClass1和DerivedClass2中的方法。
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"
在这里,SuperClass1和SuperClass2这两个类都定义了一个info()
方法。
因此,当使用Derived类的d1对象调用info()
时,Python 使用MRO来确定要调用哪个方法。
在这种情况下,MRO指定方法应首先从最左边的超类继承,因此调用SuperClass1的info()
,而不是SuperClass2的。
另请阅读