zoukankan      html  css  js  c++  java
  • Day7 子类调用父类的方法supper 绑定方法与非绑定方法

    supper:可以利用supper来重用父类的方法,可以不用指名道姓的调用了。

     1 class OldboyPeople:
     2     school = 'oldboy'
     3     def __init__(self,name,age,sex):
     4         self.name=name
     5         self.age=age
     6         self.sex=sex
     7 
     8     def eat(self):
     9         print('is eating')
    10     def teach(self):
    11         print('这是父类的teach')
    12 
    13 class OldboyTeacher(OldboyPeople):
    14     def __init__(self,name,age,sex,salary,title):
    15         # OldboyPeople.__init__(self,name,age,sex)
    16         #在Python2中需要写全:super(OldboyTeacher,self)
    17           supper()可以得到一个对象,是专门访问父类的,是子类重用父类的方法
    18         super().__init__(name,age,sex)
    19         self.salary=salary
    20         self.title=title
    21 
    22     def teach(self):
    23         # OldboyPeople.teach(self)
    24         super().teach()
    25         print('%s is teaching'  %self.name)
    26 print(OldboyTeacher.mro())
    27 
    28 egon_obj=OldboyTeacher('egon',18,'male',3.1,'沙河霸道金牌讲师')
    29 # print(egon_obj.title)
    30 # print(egon_obj.__dict__)
    31 egon_obj.teach()

    supper:supper是依赖于继承的。

    class A:
        def test(self):
            super().test()
    
    class B:
        def test(self):
            print('B')
    
    class C(A,B):
        pass
    
    # a=A()
    # a.test()
    
    print(C.mro())
    c=C()
    c.test()


    C继承了A和B,

    先打印C的执行顺序列表,如果表里边有,然后再去按顺序向后检索。如果表里边没有,报错。

    绑定方法与非绑定方法:

    绑定到类的方法:

      例如定义了一个类,然后从配置文件中读取配置参数。

     1 import settings  #定义了一个settings的文件,文件里边存储了两行配置信息,主机名和端口
     2 
     3 class MySql:
     4     def __init__(self,host,port):
     5         self.host=host
     6         self.port=port
     7 
     8     @classmethod    #不加这个参数,定义的是绑定给函数,加上这个参数,定义的是绑定给类。
     9     def from_conf(cls):
    10         print(cls)
    11         # return cls(settings.HOST,settings.PORT)
    12 
    13     def func1(self):pass
    14 
    15 
    16 conn1=MySql('127.0.0.1',3306)
    17 
    18 # print(MySql.from_conf)
    19 # conn2=MySql.from_conf()
    20 
    21 # print(conn1.host,conn2.host)
    22 
    23 # print(conn1.func1)
    24 # print(conn1.from_conf)
    25 # print(MySql.from_conf)
    26 
    27 
    28 # conn1.from_conf()
    29 # MySql.from_conf()

    非绑定方法:

    产生一个不相关的值,与任意绑定都不存在。

     1 import uuid
     2 class MySql:
     3     def __init__(self,host,port):
     4         self.host=host
     5         self.port=port
     6         self.id=self.create_id()
     7 
     8     # @classmethod
     9     # def from_conf(cls): #绑定给类的
    10     #     print(cls)
    11     #     # return cls(settings.HOST,settings.PORT)
    12     #
    13     # def func1(self): #绑定给对象的
    14     #     pass
    15 
    16     @staticmethod
    17     def create_id(): #非绑定方法
    18         return str(uuid.uuid1())
    19 
    20 
    21 conn1=MySql('127.0.0.1',3306)
    22 conn2=MySql('127.0.0.2',3306)
    23 conn3=MySql('127.0.0.3',3306)
    24 # print(MySql.create_id)
    25 # print(conn1.create_id)
    26 
    27 print(conn1.id,conn2.id,conn3.id)
  • 相关阅读:
    [luogu P2184] 贪婪大陆 [树状数组][线段树]
    luogu P3373 【模板】线段树 2
    [luogu P3384] 【模板】树链剖分 [树链剖分]
    树链剖分膜版
    AtCoder Grand Contest 026F
    AtCoder Regular Contest 091F
    AtCoder Regular Contest 099F
    AtCoder Grand Contest 027D
    向量叉积分配律简单证明
    LOJ 538. 「LibreOJ NOIP Round #1」数列递推(找规律+结论)
  • 原文地址:https://www.cnblogs.com/sexiaoshuai/p/7374557.html
Copyright © 2011-2022 走看看