Python中多继承 | python高级

浏览:8847次阅读
一条评论

共计 1223 个字符,预计需要花费 4 分钟才能阅读完成。

1. 多继承

Python 中多继承 | python 高级

从图中能够看出,所谓多继承,即子类有多个父类,并且具有它们的特征

Python 中多继承:

Python 中多继承 | python 高级

格式如下:

class 子类名(父类名 1, 父类名 2...)
    pass

代码实现:


class A(object):

    def test(self):
        print("class A test")

class B(object):
    def demo(self):
        print("class B demo")

class C(A, B):
    pass

if __name__ == '__main__':

    c = C()
    c.test()  
    c.demo()  

运行结果:

class A test
class B demo

Process finished with exit code 0

说明

  • python 中是可以多继承的
  • 父类中的方法、属性,子类会继承

注意点

  • 想一想:

    如果在上面的多继承例子中,如果父类 A 和父类 B 中,有一个同名的方法,那么通过子类去调用的时候,调用哪个?


class A(object):

    def test(self):
        print("class A test")

    def demo(self):
        print("class A demo")

class B(object):

    def demo(self):
        print("class B demo")

    def test(self):
        print("class B test")

class C(A, B):
    pass

if __name__ == '__main__':

    c = C()
    c.test()  
    c.demo()  

运行结果:

class A test
class A demo

Process finished with exit code 0
  • 调整 c 类的继承顺序
# 定义类 C
class C(B, A)
    pass

运行结果:

class B test
class B demo

Process finished with exit code 0

2. Python 中的 MRO —— 方法搜索顺序(知道)

  • Python 中针对 提供了一个 内置属性 __mro__ 可以查看 方法 搜索顺序
  • MRO 是 method resolution order,主要用于 在多继承时判断 方法、属性 的调用 路径
print(C.__mro__)

输出结果

class B test
class B demo
(<class '__main__.C'>, <class '__main__.B'>, <class '__main__.A'>, <class 'object'>)

Process finished with exit code 0
  • 在搜索方法时,是按照 __mro__ 的输出结果 从左至右 的顺序查找的
  • 如果在当前类中 找到方法,就直接执行,不再搜索
  • 如果 没有找到,就查找下一个类 中是否有对应的方法, 如果找到,就直接执行,不再搜索
  • 如果找到最后一个类,还没有找到方法,程序报错

提示:开发时,应该尽量避免这种容易产生混淆的情况! —— 如果 父类之间 存在 同名的属性或者方法 ,应该 尽量避免 使用多继承

正文完
 0
(未见秋)
版权声明:本站原创文章,由 (未见秋) 于2021-11-10发表,共计1223字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(一条评论)
2024-04-09 23:20:22 回复

Python中的多继承按照 mro 的输出结果 从左至右 的顺序查找。