• day25-python之继承组合


    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__)
  • 相关阅读:
    转 configure: error: Cannot find ldap.h
    DDoS(Distributed Denial of Service,分布式拒绝服务)
    j2ee 1.5和1.6的区别
    机器学习
    免安装版Tomcat6.0启动方法
    mysql补充(2)常用sql语句
    mysql补充(4)数据完整性
    mysql补充(3)优化sql语句查询常用的30种方法
    mysql补充(1)校对集utf8_unicode_ci与utf8_general_ci
    jdbc(1)(一)
  • 原文地址:https://www.cnblogs.com/sqy-yyr/p/10926347.html
Copyright © 2020-2023  润新知