三.绑定方法与非绑定方法
# 类中定义的函数有两大类(3小种)用途,一类是绑定方法,另外一类是非绑定方法 # 1. 绑定方法: # 特点:绑定给谁就应该由谁来调用,谁来调用就会将谁当作第一个参数自动传入 # 1.1 绑定给对象的:类中定义的函数默认就是绑定对象的 # 1.2 绑定给类的:在类中定义的函数上加一个装饰器classmethod # 2. 非绑定方法 # 特点: 既不与类绑定也不与对象绑定,意味着对象或者类都可以调用,但无论谁来调用都是一个普通函数,根本没有自动传值一说
1 class Foo: 2 def func1(self): 3 print('绑定给对象的方法', self) 4 5 @classmethod 6 def func2(cls): 7 print('绑定给类的方法', cls) 8 9 @staticmethod 10 def func3(x, y, z): 11 print('普通函数') 12 13 14 obj = Foo() 15 obj.func1() # 绑定给对象的方法 <__main__.Foo object at 0x0000000000B42BE0> 16 17 Foo.func2() # 绑定给类的方法 <class '__main__.Foo'> 18 19 obj.func3(1, 2, 3) # 普通函数 20 Foo.func3(1, 2, 3) # 普通函数 21 22 # case 23 import setting 24 25 26 class Mysql: 27 def __init__(self, ip, port): 28 self.id = self.create_id() 29 self.ip = ip 30 self.port = port 31 32 def tell_info(self): 33 print('%s:%s:%s' % (self.id, self.ip, self.port)) 34 35 @classmethod 36 def from_conf(cls): 37 return cls(setting.ip, setting.port) 38 39 @staticmethod 40 def create_id(): 41 import uuid 42 return uuid.uuid4() 43 44 45 obj = Mysql.from_conf() 46 obj.tell_info() # 04fd823a-0f04-400b-bf64-6545760d6490:192.168.1.1:3306