繼承,派生,組合
阿新 • • 發佈:2017-07-03
() elf python2 自己 pan lex each ani 開始
1 .繼承
繼承是一種創建新類的方式,在python中,新建的類可以繼承一個或多個父類,父類又可稱為基類或超類,新建的類稱為派生類或子類
1 class People: 2 pass 3 class Animal: 4 pass 5 class Student(People,Animal):#people ,Animal 是父類(基類),Student是子類(派生類) 6 pass 7 print(Student.__bases__)#(<class ‘__main__.People‘>, <class ‘__main__.Animal‘>)8 print(People.__bases__)#(<class ‘object‘>,) 9 print(Animal.__bases__)#(<class ‘object‘>,)
__base__是查看從左到右繼承的子類,
__bases__是查看繼承的父類
#在Python中,所有的類默認繼承object,
#但凡是繼承了object的子類,以及給子類的子類,都稱為新式類
#Python3中都是新式類
#沒有繼承object的子類都是經典類,(在Python2中,沒有繼承object的類,以及它的類,都是經典類)
2,父類屬性的引用
#Teacher是People的子類,繼承是 什麽 是 什麽 的關系, Teacher是People的子類
class People: ##Teacher是People的子類,繼承是 什麽 是 什麽的關系, Teacher是People的子類 def __init__(self,name,age,sex): self.name=name #是子類Teacher和Student共有的數據屬性 self.age=age self.sex=sex def foo(self): #是子類Teacher和Student共有的函數屬性 print(‘from father %s‘ %self.name) def walk(self): print(‘%s is walking‘%self.name) class Teacher(People): school=‘oldboy‘ def __init__(self,name,age,sex,salary,leverl): People.__init__(self,name,age,sex) #引用父類的數據屬性 self.salary=salary #加上自己特有的數據屬性 self.level=leverl def teacher(self): print(‘%s is teache‘%self.name) def foo(self): People.foo(self) #是加上了People的函數屬性 print(‘from teacher‘) class Student(People): def __init__(self,name,age,sex,group): People.__init__(self,name,age,sex) self.group=group def study(self): print(‘%s is studyinng‘%self.name) t=Teacher(‘egon‘,12,‘male‘,1111,100) print(t.name,t.age,t.salary,t.level)#egon 12 1111 100 t.foo() #from father egon from teacher #實例化Teacher對象的他,引用了函數屬性,同時引用了父類的函數屬性
s=Student(‘alex‘,12,‘mail‘,‘a‘)
print(s.__dict__[‘name‘]) print(s.__dict__[‘age‘])
3.組合的使用
##Teacher 和Student的共有生日類,但不是繼承關系,是 什麽 有 什麽 的關系,是Teacher有Data
組合指的是,在一個類中以另外一個類的對象作為數據屬性,稱為類的組合
1 #===============================老師,學生都有生日時間,用到組合 2 3 class Date: #Teacher 和Student的共有生日類,但不是繼承關系,是 什麽 有 什麽 的關系,是Teacher有Data的關系 4 def __init__(self,year,mon,day): 5 self.year=year 6 self.mon=mon 7 self.day=day 8 def tell_birth(self): 9 print(‘出生於<%s>年 <%s>月 <%s>日‘%(self.year,self.mon,self.day)) 10 11 class Teacher: 12 def __init__(self,name,age,year,mon,day): 13 self.name=name 14 self.age=age 15 self.birth=Date(year,mon,day) #birth=Date(year,mon,day) 就是在實例化對象,對象是birth,從類Data裏開始實例化 16 17 def teach(self): 18 print(‘%s is teaching ‘%self.name) 19 20 class Student: 21 def __init__(self,name,age,year,mon,day): 22 self.name=name 23 self.age=age 24 self.birth=Date(year,mon,day) 25 def study(self): 26 print(‘%s is studying‘%self.name) 27 28 t=Teacher(‘egon‘,12,1990,2,2) 29 print(t.name,t.age) #egon 12 30 print(t.birth)#<__main__.Date object at 0x000001FD59B903C8> 31 t.birth.tell_birth()# 調用了Data的函數屬性 出生於<1990>年 <2>月 <2>日
繼承,派生,組合