欢迎关注博主 python老鸟 或 前往 『Python自学网』, 从基础入门免费课程开始,逐步深入学习python全栈体系课程,适合新手入门到精通全栈开发。
免费专栏传送门:《Python基础教程》
Python中面向对象中的三大特性分别是:封装、继承、多态。继承,子类可以拥有父类的所有属性和方法,之前讲到过单继承,每个子类只有一个父类这种情况叫做单继承。下面讲继承的另外一种情况,多继承。
子类可以拥有多个父类,并且具有所有父类的属性和方法
例如:孩子会继承自己的父亲和母亲的特性
语法:
- class 子类名(父类名1, 父类名2...):
- pass
代码体验:
- class A:
-
- def test(self):
- print("test方法")
-
-
- class B:
-
- def demo(self):
- print("demo方法")
-
-
- class C(A, B):
- pass
-
-
- # 创建子类对象
- c = C()
-
- c.test()
- c.demo()
执行结果:
可以让子类对象同时具有多个父类的属性和方法。
继承这个特性就是保证我们在开发过程中尽量的不让相同的代码重复的编写,降低代码的冗余度,如果两个父类的代码都已经开发完成,在实际开发中希望有一个类的对象具有两个父类的方法,就可以创建一个子类,让这个子类继承自多个父类。
问题: 如果不同的父类中存在同名的方法,子类对象在调用方法时会调用哪一个父类中的方法呢?
开发时,应该尽量避免这种容易产生混淆的情况。如果父类之间存在同名的属性或者方法,应该尽量避免使用多继承。
代码体验:
- class A:
-
- def test(self):
- print("A --- test方法")
-
- def demo(self):
- print("A --- demo方法")
-
-
- class B:
-
- def demo(self):
- print("B --- demo方法")
-
- def test(self):
- print("B --- test方法")
-
-
- class C(A, B):
- pass
-
-
- # 创建子类对象
- c = C()
-
- c.test()
- c.demo()
执行结果:
此时,class C(A, B)中A在B之前,让子类先继承自A再继承自B,那么我们再换个顺序看看:
虽然说我这里知识简单的换下父类的位置,结果就变了。
友情提示:具体调用哪一个父类的方法,在底层上是有专门的处理方式的,并不是在代码中简单的调整下父类的顺序。
下一篇文章是基于这篇文章的科普知识,分别是Python中的MRO —— 方法搜索顺序、新式类和旧式(经典)类。