类装饰器
类装饰器,顾名思义就是作用在类上面的装饰器,比函数装饰器要简单点。
给类动态添加属性的装饰器
def set_name(name): # 定义一个给类添加NAME属性的装饰器,name是类的NAME属性的值
def wrap(cls): # cls是需要装饰的类
cls.NAME = name # 给类添加NAME属性
return cls # 返回这个类
return wrap # 装饰器
@set_name('test name F') # 相当于一个有参数的装饰器
class F:
pass
print(F.NAME)
返回结果:
>>> test name F
给类动态添加方法的装饰器
def print_name(cls): # 定义一个装饰器
def get_name(self): # 定义一个带有self的函数,如果没有self参数,那么这个动态添加的方法就不能使用实例来访问了
return cls.__name__ # 返回需要装饰器的装饰器的名字
cls.__get_name__ = get_name # 将get_name方法,传给cls类的__get_name__方法
return cls
@print_name
class G:
pass
g = G()
print(g.__get_name__()) # 直接使用__get_name__就可以访问了
返回结果
>>> G
类装饰器通常是用于给类添加属性用的,对于添加类方法的装饰器,是有更好的方法代替的