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



  • 相关阅读:
    MSSQL大量数据时,建立索引或添加字段后保存更改超时该这么办
    POJ 3261 Milk Patterns (后缀数组)
    POJ 1743 Musical Theme (后缀数组)
    HDU 1496 Equations (HASH)
    694. Distinct Substrings (后缀数组)
    POJ 1222 EXTENDED LIGHTS OUT (枚举 或者 高斯消元)
    POJ 1681· Painter's Problem (位压缩 或 高斯消元)
    POJ 1054 The Troublesome Frog (hash散列)
    HDU 1716 排列2
    HDU 4405 Aeroplane chess (概率DP & 期望)
  • 原文地址:https://www.cnblogs.com/gyh04541/p/7111047.html
Copyright © 2011-2022 走看看