57、多继承

小白量化 2025-12-15 07:56:34 19 举报

1、含义
单继承指的是子类仅直接继承自一个父类,从而获取该父类的属性和方法。
多继承则允许子类同时继承自多个父类,从而能够获取并访问这些父类的所有非私有属性和方法。

# 示例
class A1:  # 父类1
   a1_var = "A1"
   def a1_method(self):
       print("这是A1类的method方法~")


class A2:  # 父类2
   a2_var = "A2"

   def a2_method(self):
       print("这是A2类的method方法~")


class B(A1, A2): # 子类
   pass


b = B()
print(dir(b))

# 使用父类一的属性和方法
print(B.a1_var)
b.a1_method()

# 使用父类二的属性和方法
print(B.a2_var)
b.a2_method()

2、不同父类间存在同名方法
注意:开发时,应尽量避免这种容易产生混淆的情况。也就是说当不同父类之间存在同名方法或属性时,应尽可能避免使用多继承。

# 示例
class A1:
   """父类一"""
   def method(self):
       print("这是A1类的method方法~")


class A2:
   """父类二"""
   def method(self):
       print("这是A2类的method方法~")


class B(A2, A1):
   """子类"""
   def method(self):
       print("这是B类的method方法~")


b = B()
b.method()

3、方法搜索顺序      --了解
(1)作用
Python中的内置属性__mro__可以查看类的方法搜索顺序
(2)语法

# 语法结构
类名.__mro__
# 示例
class A1:
   """父类一"""
   def method(self):
       print("这是A1类的method方法~")


class A2:
   """父类二"""
   def method(self):
       print("这是A2类的method方法~")


class B(A1, A2):
   """子类"""
   def method(self):
       print("这是B类的method方法~")

mro = B.__mro__
print(mro, type(mro))
b = B()
b.method()

总结:在多继承中,当存在同名方法时,Python将严格依据__mro__定义的顺序,从左至右遍历类及其所有基类以搜索方法。
如果在当前类或任一父类中找到了对应的方法,Python就会立即执行该方法,并停止进一步的搜索。
如果遍历完整个__mro__元组,包括最基础的object类,都没有找到对应的方法,那么Python会抛出一个AttributeError异常,明确指出该方法未被定义
4、弊端
多继承虽然提供了灵活性,但也容易引发冲突,特别是当多个父类之间存在同名方法时,这会增加代码设计的复杂性和维护难度。因此,在设计类继承结构时,应谨慎使用多继承。

量化小白,从0开始学量化! 1

著作权归文章作者所有。 未经作者允许禁止转载!

最新回复 ( 0 )
发新帖
0
DEPRECATED: addslashes(): Passing null to parameter #1 ($string) of type string is deprecated (/data/user/htdocs/xiunophp/xiunophp.min.php:48)