继承是面向对象编程中的一种特性,通过该特性,类可以继承另一个类的属性和方法。在 python 中,你可以实现不同类型的继承,比如单继承、多继承和多层继承。本章将介绍如何在 python 中实现多层继承。
多层继承是一种层级继承,使得一个派生类继承另一个派生类。也就是说,一个类是由另一个类推导出来的。这形成了一条继承链。
链顶端的类称为基类或父类,中间的类称为派生类或子类,链的最底层称为子派生类或子类。
以下图示展示了多层继承的概念 −

python 中多层继承的示例
让我们来看一个例子,以理解 python 中多层继承的工作原理 −
# base class
class network:
def connectivity(self):
return "network connects"
# derived class
class network_5g(network):
def fast_connectivity(self):
return "5g network provides superfast connectivity"
# sub-derived class
class network_5g_airtel(network_5g):
def fast_and_stable_connectivity(self):
return "airtel 5g network is fast and remains stable"
# creating an instance of network_5g_airtel
network_object = network_5g_airtel()
print(network_object.connectivity()) # inherited from network class
print(network_object.fast_connectivity()) # inherited from network_5g class
print(network_object.fast_and_stable_connectivity()) # inherited from network_5g_airtel class在该代码中,network_5g_airtel类继承了network_5g类的函数和属性,类又继承了网络类。因此,network_5g_airtel将可以使用诸如连接()(来自网络)、(fast_connectivity()(来自network_5g)和fast_and_stable_connectivity()(来自network_5g_airtel自身)等方法。
当你运行该代码时,其输出将是 −
network connects
5g network provides superfast connectivity
airtel 5g network is fast and remains stable
python 中多层继承的 mro
我们考虑上述示例中的一个情景,其中network_5g类也有一个名为 connectivity()的方法。那么,如果我们从 network_5g_airtel 类实例调用 connectivity() 方法,会发生什么?这正是方法解析令(mro)发挥作用的地方。
我们修改前例,在network_5g类中加入一个connectivity()方法。
# base class
class network:
def connectivity(self):
return "network connects"
# derived class
class network_5g(network):
def fast_connectivity(self):
return "5g network provides superfast connectivity"
def connectivity(self):
return "5g network connects faster"
# sub-derived class
class network_5g_airtel(network_5g):
def fast_and_stable_connectivity(self):
return "airtel 5g network is fast and remains stable"
# creating an instance of network_5g_airtel
obj1 = network_5g_airtel()
print(obj1.connectivity()) # inherited from network class上述代码的输出为−
5g network connects faster
这表明调用的是network_5g类的 connectivity() 方法,而非网络类的。这是因为 python 的方法解析顺序(mro)采用深度优先方法,先在当前类中查找该方法,然后在父类中查找,依此类推。
要知道任何类的方法解析顺序,可以使用mro()方法。以下是你可以这样做的方法:
print(network_5g_airtel.mro()) output: [<class '__main__.network_5g_airtel'>, <class '__main__.network_5g'>, <class '__main__.network'>, <class 'object'>]
多层继承中的覆盖方法
在多层继承中,派生类可以覆盖其父类的方法。也就是说,如果一个方法在父类和子类中都定义了,那么子类中的方法将覆盖父类的方法。
这里有一个例子,说明多层继承中方法覆盖 −
# base class
class vehicle:
def start(self):
return "vehicle starts"
# derived class
class car(vehicle):
def start(self):
return "car starts"
# sub-derived class
class sportscar(car):
def start(self):
return "sports car starts"
# creating an instance of sportscar
sports_car = sportscar()
print(sports_car.start()) # calls the start method of sportscar class上述代码的输出为−
sports car starts
多层继承的最佳实践
- 保持继承链简洁:尽量控制继承层级(建议不超过 3 层),层级过多会导致代码逻辑混乱,难以调试。
- 用 super () 代替手动指定父类:尤其是初始化方法,
super()能适配 mro 顺序,避免因继承链调整导致的错误。 - 避免多层重写混乱:如果需要重写上层方法,建议在方法内先用
super()调用上层方法,再添加自己的逻辑(保持继承链的完整性):
class child(parent):
def common_method(self):
super().common_method() # 先执行父类的方法
print("再添加子类自己的逻辑")结论
- 多层继承是 “纵向” 的继承链(子类→父类→祖父类),子类会继承所有上层类的属性和方法。
- 方法 / 属性查找遵循就近原则(沿 mro 向上找第一个匹配项),子类重写会覆盖上层类的同名方法。
super()是多层继承的核心工具,能自动沿 mro 调用上层类的方法,优先使用super()而非手动指定父类名,提升代码灵活性。
总之,多层继承是一种继承类型,其中一个类从另一个衍生类推导出来,形成一条继承链。方法解析顺序(mro)将决定当继承链中存在同名方法时,调用哪种方法。方法覆盖可以通过覆盖子类中父类的方法。
到此这篇关于python中多层继承的实现示例的文章就介绍到这了,更多相关python 多层继承内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论