AI智能
改变未来

Python – 面向对象编程 – 多继承


继承的详解

https://www.cnblogs.com/poloyy/p/15216652.html

这篇文章讲的都是单继承,Python 中还有多继承

Python 多继承的背景

  • 大部分面向对象的编程语言,都只支持单继承,即子类有且只能有一个父类
  • 而 Python 却支持多继承(C++也支持多继承)
  • 和单继承相比,多继承容易让代码逻辑复杂、思路换了一直备受争议,中小型项目中较少使用,后来的Java、C#、PHP 取消了多继承
  • 多继承带来的问题:多个父类中包含同名的类方法
  • Python 的解决方案:根据子类继承多个父类时这些父类的前后次序决定,即排在前面父类中的类方法会覆盖排在后面父类中的同名类方法【后面文章详解】

什么是多继承

  • 子类可以拥有多个父亲,并且具有所有父类的属性和方法
  • 儿子可以拥有多个爸爸….爸爸也可以有多个儿子…..

语法格式

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

类图参考

实际代码

class A:def test(self):print(\"test\")class B:def demo(self):print(\"demo\")class C(A, B):...c = C()c.test()c.demo()# 输出结果testdemo

C 继承了 A、B,拥有了他们的所有属性和方法

多继承带来的顺序问题

问题的提出

如果不同的父类中存在同名的方法,子类对象在调用该方法时,会调用哪一个父类的方法呢?

重点注意

  • 正式开发中,如果需要用到多继承,那么多个父类应该避免使用同名的属性、方法
  • 如果父类存在同名的属性、方法,应该尽量避免使用多继承

类图

实际代码

class A:def test(self):print(\"AAA-test\")def demo(self):print(\"AAA-demo\")class B:def test(self):print(\"BBB-test\")def demo(self):print(\"BBB-demo\")class C(A, B):...c = C()c.test()c.demo()# 输出结果AAA-testAAA-demo

调用的是父类 A 的方法

如果 C 继承父类的顺序改变一下呢

# 刚刚是 A, B ; 现在是 B, Aclass C(B, A):...c = C()c.test()c.demo()# 输出结果BBB-testBBB-demo
  • 现在变成调用父类 B 的方法了
  • 这又是为什么呢?答案就是 Python 的 MRO 方法搜索顺序

Python 的 MRO 方法搜索顺序

https://www.cnblogs.com/poloyy/p/15226424.html

多继承结合 super() 的使用呢?

https://www.geek-share.com/detail/2841814820.html

新式类和旧式类

https://www.geek-share.com/detail/2841806420.html

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » Python – 面向对象编程 – 多继承