一:绑定方法:特殊之处在于 将调用者本身当做第一个参数 自动传入
1.绑定给对象的方法:调用者是 对象,自动传入的是 对象
class Mysql:
def __init__(self, ip, port):
self.ip = ip
self.port = port
def func(self):
print(f'{self.ip} {self.port}')
obj = Mysql('127.0.0.1', 3306)
obj.func() # 127.0.0.1 3306
2.绑定给类的方法:调用者是 类,自动传入的是 类
新的方法:
setting.py
IP = '127.0.0.1'
PORT = 3306
import settings
class Mysql:
def __init__(self, ip, port):
self.nid = self.create_id()
self.ip = ip
self.port = port
def func(self):
print(f'{self.ip} {self.port}')
@classmethod # 绑定给类的方法
def form_conf(cls):
print(cls)
return cls(settings.IP, settings.PORT)
@staticmethod # 将下述函数 装饰成一个静态方法
def create_id():
import uuid
return uuid.uuid4()
@classmethod
def f1(cls):
pass
def f2(self):
pass
obj2 = Mysql.form_conf() # <class '__main__.Mysql'>
print(obj2.__dict__) # {'nid': UUID('fb7015fb-8e6c-4c1e-9a24-241a7c3aff10'), 'ip': '127.0.0.1', 'port': 3306}
二:非绑定方法
没有绑定给任何人:调用者可以是类、对象,没有自动传参的效果
class Mysql:
def __init__(self, ip, port):
self.ip = ip
self.port = port
@staticmethod # 将下述函数 装饰成一个静态方法
def create_id():
import uuid
return uuid.uuid4()
obj1 = Mysql('1.1.1.1', 2208)
# print(Mysql.create_id) # <function Mysql.create_id at 0x037083D0>
# print(obj1.create_id) # <function Mysql.create_id at 0x037083D0>
Mysql.create_id()
obj1.create_id()