day25-python之继承组合

  • 2020 年 1 月 16 日
  • 笔记

1.上节回顾

 1 class School:   2     x=1   3     def __init__(self,name,addr,type):   4         self.Name=name   5         self.Addr=addr   6         self.Type=type   7   8     def tell_info(self):   9         print('学校的详细信息是:name:%s addr:%s' %(self.Name,self.Addr))  10  11  12 # s1=School('oldboy','沙河','私立')  13  14 # print(s1.__dict__)  15 #  16 # print(School.__dict__)  17 #  18 # s1.tell_info()  19 # School.tell_info(s1)

2.静态属性

 1 class Room:   2     tag=1   3     def __init__(self,name,owner,width,length,heigh):   4         self.name=name   5         self.owner=owner   6         self.width=width   7         self.length=length   8         self.heigh=heigh   9  10     @property  11     def cal_area(self):  12         # print('%s 住的 %s 总面积是%s' % (self.owner,self.name, self.width * self.length))  13         return  self.width * self.length  14     @property  15     def cal1_area(self):  16         return self.width * self.length  17  18  19     def test(self):  20         print('from test',self.name)  21  22     @classmethod  23     def tell_info(cls,x):  24         print(cls)  25         print('--》',cls.tag,x)#print('--》',Room.tag)  26     # def tell_info(self):  27     #     print('---->',self.tag)  28     @classmethod  29     def tell_info1(cls,x):  30         print(cls)  31         print('-->>',cls.tag,x)  32  33 # print(Room.tag)  34  35 # Room.test(1) #1.name  36 # r1=Room('厕所','alex',100,100,100000)  37 # Room.tell_info(10)  38  39 r1=Room('厕所','alex',100,100,100000)  40 r2=Room('公共厕所','yuanhao',1,1,1)  41 # print('%s 住的 %s 总面积是%s' %(r1.owner,r1.name,r1.width*r1.length))  42 # print('%s 住的 %s 总面积是%s' %(r2.owner,r2.name,r2.width*r2.length))  43 # r1.cal_area()  44 # r2.cal_area()  45 print(r1.cal_area)  46 print(r2.cal_area)  47 print(r1.name)  48 print(r2.name)

3.类方法

 1 class Room:   2     tag=1   3     def __init__(self,name,owner,width,length,heigh):   4         self.name=name   5         self.owner=owner   6         self.width=width   7         self.length=length   8         self.heigh=heigh   9  10     @property  11     def cal_area(self):  12         # print('%s 住的 %s 总面积是%s' % (self.owner,self.name, self.width * self.length))  13         return  self.width * self.length  14     @property  15     def cal_area1(self):  16         return self.width * self.length  17  18  19     def test(self):  20         print('from test',self.name)  21  22     @classmethod  23     def tell_info(cls,x):  24         print(cls)  25         print('--》',cls.tag,x)#print('--》',Room.tag)  26     # def tell_info(self):  27     #     print('---->',self.tag)  28  29     @classmethod  30     def tell_info1(cls,x):  31         print(cls)  32         print('-->>',cls.tag,x)  33  34 # print(Room.tag)  35  36 # Room.test(1) #1.name  37 r1=Room('厕所','alex',100,100,100000)  38 # Room.test(r1)  39 Room.tell_info(10)

4.静态方法

 1 class Room:   2     tag=1   3     def __init__(self,name,owner,width,length,heigh):   4         self.name=name   5         self.owner=owner   6         self.width=width   7         self.length=length   8         self.heigh=heigh   9  10     @property  11     def cal_area(self):  12         # print('%s 住的 %s 总面积是%s' % (self.owner,self.name, self.width * self.length))  13         return  self.width * self.length  14  15     @classmethod  16     def tell_info(cls,x):  17         print(cls)  18         print('--》',cls.tag,x)#print('--》',Room.tag)  19     # def tell_info(self):  20     #     print('---->',self.tag)  21  22     @staticmethod  23     def wash_body(a,b,c):  24         print('%s %s %s正在洗澡' %(a,b,c))  25  26     @staticmethod  27     def wash_body1(a,b,c):  28         print('%s %s %s正在洗澡'%(a,b,c))  29  30     def test(x,y):  31         print(x,y)  32  33 # Room.wash_body('alex','yuanhao','wupeiqi')  34  35 # print(Room.__dict__)  36  37  38 r1=Room('厕所','alex',100,100,100000)  39 #  40 # print(r1.__dict__)  41 # r1.wash_body('alex','yuanhao','wupeiqi')  42  43 # Room.test(1,2)  44 r1.test(1)

5.组合

  1 # class Hand:    2 #     pass    3 #    4 # class Foot:    5 #     pass    6 #    7 # class Trunk:    8 #     pass    9 #   10 # class Head:   11 #     pass   12   13   14 # class Person:   15 #     def __init__(self,id_num,name):   16 #         self.id_num=id_num   17 #         self.name=name   18 #         self.hand=Hand()   19 #         self.foot=Foot()   20 #         self.trunk=Trunk()   21 #         self.head=Head()   22 # p1=Person('111111','alex')   23 #   24 #   25 # print(p1.__dict__)   26   27 # class School:   28 #     def __init__(self,name,addr):   29 #         self.name=name   30 #         self.addr=addr   31 #   32 #     def zhao_sheng(self):   33 #         print('%s 正在招生' %self.name)   34 #   35 # class Course:   36 #     def __init__(self,name,price,period,school):   37 #         self.name=name   38 #         self.price=price   39 #         self.period=period   40 #         self.school=school   41 # #   42 # #   43 # #   44 # s1=School('oldboy','北京')   45 # s2=School('oldboy','南京')   46 # s3=School('oldboy','东京')   47 #   48 # # c1=Course('linux',10,'1h','oldboy 北京')   49 # c1=Course('linux',10,'1h',s1)   50 # #   51 # print(c1.__dict__)   52 # print(c1.school.name)   53 # print(s1)   54   55   56   57   58   59   60   61   62   63   64   65   66   67 class School:   68     def __init__(self,name,addr):   69         self.name=name   70         self.addr=addr   71   72   73     def zhao_sheng(self):   74         print('%s 正在招生' %self.name)   75   76 class Course:   77     def __init__(self,name,price,period,school):   78         self.name=name   79         self.price=price   80         self.period=period   81         self.school = school   82   83   84   85 s1=School('oldboy','北京')   86 s2=School('oldboy','南京')   87 s3=School('oldboy','东京')   88 #   89 # c1=Course('linux',10,'1h','oldboy 北京')   90 c1=Course('linux',10,'1h',s1)   91   92 msg='''   93 1 老男孩 北京校区   94 2 老男孩 南京校区   95 3 老男孩 东京校区   96 '''   97 while True:   98     print(msg)   99     menu={  100         '1':s1,  101         '2':s2,  102         '3':s3  103     }  104     choice=input('选择学校>>: ')  105     school_obj=menu[choice]  106     name=input('课程名>>: ')  107     price=input('课程费用>>: ')  108     period=input('课程周期>>: ')  109     new_course=Course(name,price,period,school_obj)  110     print('课程【%s】属于【%s】学校' %(new_course.name,new_course.school.name))

6.继承

 1 class Dad:   2     '这个是爸爸类'   3     money=10   4     def __init__(self,name):   5         print('爸爸')   6         self.name=name   7     def hit_son(self):   8         print('%s 正在打儿子' %self.name)   9  10 class Son(Dad):  11     money = 1000000000009  12     def __init__(self,name,age):  13         self.name=name  14         self.age=age  15  16     def hit_son(self):  17         print('来自儿子类')  18 # print(Son.money)  19 # Son.hit_son(Son('andy',12))  20 # print(Dad.__dict__)  21 # print(Son.__dict__)  22 s1=Son('alex',18)  23 # s1.hit_son()  24 print(s1.money)  25 print(Dad.money)  26 print(s1.name)  27 print(s1.money)  28 print(s1.__dict__)  29 s1.hit_son()

7.接口继承

 1 import abc   2 class All_file(metaclass=abc.ABCMeta):   3     @abc.abstractmethod   4     def read(self):   5         pass   6   7     @abc.abstractclassmethod   8     def read1(self):   9         pass  10  11     @abc.abstractmethod  12     def write(self):  13         pass  14  15     @abc.abstractclassmethod  16     def write1(self):  17         pass  18  19 class Disk(All_file):  20     def read(self):  21         print('disk read')  22  23     def write(self):  24         print('disk write')  25  26 class Cdrom(All_file):  27     def read(self):  28         print('cdrom read')  29  30     def write(self):  31         print('cdrom write')  32  33  34 class Mem(All_file):  35     def read(self):  36         print('mem read')  37  38     def write(self):  39         print('mem write')  40  41 class Mem1(All_file):  42     def read(self):  43         print('mem read')  44  45     def write(self):  46         print('mem write')  47 #  48 m1=Mem1()  49 m1.read()  50 m1.write()

8.继承顺序

 1 #coding:utf-8   2 class A:   3     def test(self):   4         print('A')   5     pass   6 class B(A):   7     # def test(self):   8     #     print('B')   9  10     pass  11 class C(A):  12     def test(self):  13         print('C')  14     pass  15  16 class D(B):  17     # def test(self):  18     #     print('D')  19     pass  20  21 class E(C):  22     # def test(self):  23     #     print('E')  24     pass  25  26 class F(D,E):  27     # def test(self):  28     #     print('F')  29     pass  30 f1=F()  31 f1.test()   #经典类:F->D->B->A-->E-->  32  33 print(F.__mro__)  34  35 #F-->D->B-->E--->C--->A新式类

9.在子类中调用父类的方法

 1 class Vehicle:   2     Country='China'   3     def __init__(self,name,speed,load,power):   4         self.name=name   5         self.speed=speed   6         self.load=load   7         self.power=power   8     def run(self):   9         print('开动啦')  10         print('开动啦')  11 class Subway(Vehicle):  12         def __init__(self,name,speed,load,power,line):  13            Vehicle.__init__(self,name,speed,load,power)  14            self.line=line  15  16         def show_info(self):  17             print(self.name,self.speed,self.load,self.power,self.line)  18  19         def run(self):  20             Vehicle.run(self)  21             print('%s %s 线,开动啦' %(self.name,self.line))  22 line13=Subway('北京地铁','10km/s',1000000000,'电',13)  23  24 line13.show_info()  25  26 line13.run()

10.super方法的使用

 1 class Vehicle1:   2     Country='China'   3     def __init__(self,name,speed,load,power):   4         self.name=name   5         self.speed=speed   6         self.load=load   7         self.power=power   8     def run(self):   9         print('开动啦')  10         print('开动啦')  11 class Subway(Vehicle1):  12         def __init__(self,name,speed,load,power,line):  13            # Vehicle.__init__(self,name,speed,load,power)  14            # super().__init__(name,speed,load,power)  #super(__class__,self).__init__(name,speed,load,power)  15            super(Subway,self).__init__(name,speed,load,power)  16            self.line=line  17         def show_info(self):  18             print(self.name,self.speed,self.load,self.power,self.line)  19         def run(self):  20             # Vehicle.run(self)  21             super().run()  22             print('%s %s 线,开动啦' %(self.name,self.line))  23 line13=Subway('北京地铁','10km/s',1000000000,'电',13)  24 line13.show_info()  25 line13.run()  26  27 print(line13.__class__)