classmethod与staticmethod内置装饰器
classmethod与staticmethod内置装饰器
1、classmethod
是一个装饰器,给在类内部定义方法装饰,将类内部的方法变为 “类的绑定方法”
class DB:
__data = "tom is very cute"
def __init__(self, user, pwd, role):
self.user = user
self.pwd = pwd
self.role = role
@classmethod
def check_db(cls, user, pwd, role): # cls指的是类
# 在类方法内部调用类产生一个实例 ---> 对象
obj = cls(user, pwd, role)
# 查看数据前必须通过校验
if obj.user == "root" and obj.pwd == "123" and obj.role == "admin":
return cls.__data
print(DB.check_db("root", "123", "admin"))
执行结果:
tom is very cute
2、staticmethod
staticmethod:静态方法
是一个装饰器,给在类内部定义方法装饰,将类内部的方法变为 “非绑定方法”
class Foo: @staticmethod # staticmethod装饰器将该方法变成 "非绑定方法",由于func方法中的self没有任何意义,所以可以删除self参数,调用时也无需传参 # 注意:删除self之后该方法与此类无任何绑定关系 def func(): # 此方法与普通函数一样 print("123") obj = Foo() # 对象调用非绑定方法 obj.func() # 类调用非绑定方法 Foo.func()
执行结果:
123
123
3、绑定方法总结
① 对象的绑定方法:(在类内部封装(定义)一个方法即可)
由对象来调用,由谁来调用,会将谁(对象)当做第一个参数传入
② 类的绑定方法:(在类内部方法中,使用classmethod装饰器即可)
由类来调用,由谁来调用,会将谁(类)当做第一个参数传入
③ 非绑定方法:(在类内部方法中,使用staticmethod装饰器即可)
可以由对象或者类来调用,谁来调用都是一个普通方法(普通函数),方法需要传入几个参数,调用时候就得传入几个参数