经典类与新式类的继承顺序
Posted zhong2018
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了经典类与新式类的继承顺序相关的知识,希望对你有一定的参考价值。
1 #经典类与新式类的继承顺序 2 3 class Teacher(object): 4 cn=‘Harvard‘ 5 def __init__(self,name,age,sex): 6 self.name=name 7 self.age=age 8 self.sex=sex 9 self.__money=5600 10 11 def show_private_attribule(self): 12 print(‘private attribute:%s‘ %self.__money) 13 14 class Master(Teacher): 15 def __init__(self,name,age,sex,subject): 16 Teacher.__init__(self,name,age,sex)#重构父类的构造函数,继承多个就多写一个 17 #super(Master,self).__init__(name,age,sex) #通用写法,继承多个父类都可以用这一个 18 #继承多个类,只运行第一个类的构造函数,其它的不运行 19 #没有,横向逐个找,向上找(查找策略:广度优先 )(新式类) 20 #python2.x是深度优先 (经典类) 21 self.subject=subject 22 print(‘in the Master‘) 23 24 def speak(self): 25 print(‘I am master %s I study %s subject‘ %(self.name,self.subject)) 26 27 class Doctor(Teacher): 28 def __init__(self,name,age,sex,allowance): 29 Teacher.__init__(self, name, age, sex) 30 #super(Doctor,self).__init__(name,age,sex) 31 self.allowance=allowance 32 print(‘in the Doctor‘) 33 34 def ralation(self,obj): 35 print(‘%s is %s \‘s student‘ %(obj.name,self.name)) 36 37 class Specialist(Master,Doctor): 38 def __init__(self,name,age,sex,subject,allowance,research_field):#先查找Master构造执行,没有向Doctor查找,再没有向上Teacher查找 39 Master.__init__(self,name,age,sex,subject) 40 Doctor.__init__(self,name,age,sex,allowance) 41 self.research_field=research_field 42 print(‘in the Specialist‘) 43 44 t1=Teacher(‘Jack‘,26,‘M‘) 45 m1=Master(‘Alice‘,22,‘F‘,‘French‘) 46 d1=Doctor(‘Monica‘,28,‘F‘,6600) 47 s1=Specialist(‘Jones‘,32,‘F‘,‘French‘,6600,‘language‘)
以上是关于经典类与新式类的继承顺序的主要内容,如果未能解决你的问题,请参考以下文章