1. 程式人生 > >繼承,派生,組合

繼承,派生,組合

() 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:  ##TeacherPeople的子類,繼承是 什麽 是 什麽的關系, TeacherPeople的子類
    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>日




繼承,派生,組合