zoukankan      html  css  js  c++  java
  • 继承,派生,组合

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



  • 相关阅读:
    P4665 [BalticOI 2015]Network 题解
    NOIp2020游记
    独立集(bubble) 题解
    密码(substring) 题解
    8.20被题虐
    开通博客了!
    CSP-S2021 记
    「CSP-S 2020」函数调用(拓扑排序+DP)
    OI生涯回忆录
    [UOJ79]一般图最大匹配(带花树)
  • 原文地址:https://www.cnblogs.com/gyh04541/p/7111047.html
Copyright © 2011-2022 走看看