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)
原文地址:https://www.cnblogs.com/sexiaoshuai/p/7374557.html