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、弊端
多继承虽然提供了灵活性,但也容易引发冲突,特别是当多个父类之间存在同名方法时,这会增加代码设计的复杂性和维护难度。因此,在设计类继承结构时,应谨慎使用多继承。
著作权归文章作者所有。 未经作者允许禁止转载!