1.绑定方法
"""
绑定方法: 特殊之处在于将调用者本身当做第一个参数自动传入
"""
1.1绑定给对象的方法
绑定给对象的方法 : 调用者是对象,自动传入的是对象
class foo:
def say(self):
print('我说: 你好啊')
obj = foo()
obj.say() # 其中say是绑定给对象的方法 , 虽然它写在类中
1.2绑定给类的方法
绑定给类的方法 : 调用者类 , 自动传入的是类
import settings
class Mysql:
def __init__(self, ip, port):
self.ip = ip
self.port = port
def func(self):
print(f"{self.ip}:{self.port}")
@classmethod # 将下面的函数装饰成绑定给类的方法
def from_conf(cls):
print(cls) # 当前类
return cls(settings.ip, settings.PORT)
"""
很多时候类方法都是提供一种从配置文件中实例化对象的这个方法
类方法应用场景 : 一种新的造对象 , 初始化的方法 (可能来自配置文件或其他)
"""
那么什么时候这个方法应该是绑定给对象的 , 还是绑定给类的呢 ? 怎么判断呢?
这个就需要看你的函数体代码的具体功能 , 如果函数体代码用到对象 , 那就是绑定给对象 , 函数体代码用到类那就绑定给类
2.非绑定方法
在绑定方法中要么绑定给对象 , 要么绑定给类 , 然后函数体代码中有对象或者类 , 那么有没有一种函数体代码中 , 既不用到对象 , 也不用到类呢??? 这种函数就是非绑定方法也叫静态方法
class Mysql:
def __init__(self, ip, port):
self.ip = ip
self.port = port
@staticmethod # 将下面方法装饰成一个非绑定方法
def create_id():
import uuid
return uuid.uuid1()
既然没有绑定 谁来调用呢 ? 因为没有绑定 , 所以对象和类都可以调用 , 但是没有自动传参的效果
obj = Mysql('127.0.0.1', 8080)
print(obj.create_id())
print(Mysql.create_id())
应用场景 : 当函数体代码中不需要类 , 也不需要对象 , 并且你还想把这个方法集成在类内部 , 就使用非绑定方法