继承,派生,组合

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>日

 

 

 




posted @ 2017-07-03 14:37  谷子的  阅读(231)  评论(0编辑  收藏  举报