python多继承

先来了解下多重继承的概念,所谓多重继承,是指python的类可以有两个以上父类,也即有类A,类B,类C,C同时继承类A与类B,此时C中可以使用A与B中的属性与方法。那么问题来了,如果A与B中具有相同名字的方法,这个时候python怎么调用的会是哪个方法呢?

python多继承

python中使用多继承,会涉及到查找顺序(MRO)、重复调用(钻石继承,也叫菱形继承问题)等

MRO即method resolution order,用于判断子类调用的属性来自于哪个父类。在Python2.3之前,MRO是基于深度优先算法的,自2.3开始使用C3算法,定义类时需要继承object,这样的类称为新式类,否则为旧式类

python多继承

代码

  1. #类定义
  2. class people:
  3. #定义基本属性
  4. name =''
  5. age =0
  6. #定义私有属性,私有属性在类外部无法直接进行访问
  7. __weight =0
  8. #定义构造方法
  9. def __init__(self,n,a,w):
  10. self.name = n
  11. self.age = a
  12. self.__weight = w
  13. def speak(self):
  14. print("%s 说: 我 %d 岁。"%(self.name,self.age))
  15. #单继承示例
  16. class student(people):
  17. grade =''
  18. def __init__(self,n,a,w,g):
  19. #调用父类的构函
  20. people.__init__(self,n,a,w)
  21. self.grade = g
  22. #覆写父类的方法
  23. def speak(self):
  24. print("%s 说: 我 %d 岁了,我在读 %d 年级"%(self.name,self.age,self.grade))
  25. #另一个类,多重继承之前的准备
  26. class speaker():
  27. topic =''
  28. name =''
  29. def __init__(self,n,t):
  30. self.name = n
  31. self.topic = t
  32. def speak(self):
  33. print("我叫 %s,我是一个演说家,我演讲的主题是 %s"%(self.name,self.topic))
  34. #多重继承
  35. class sample(speaker,student):
  36. a =''
  37. def __init__(self,n,a,w,g,t):
  38. student.__init__(self,n,a,w,g)
  39. speaker.__init__(self,n,t)
  40. test = sample("小黑",25,80,4,"Python")
  41. test.speak()#方法名同,默认调用的是在括号中排前地父类的方法

python多继承

运行结果

我叫小黑,我是一个演说家,我演讲的主题是 Python

相关推荐