一、在了解类的装饰器之前应该先看一下函数的装饰器:
def foo(fn):
def bar(a):
fn(a*(a-1))
print(a)
return fn(a*(a-1))
return bar
@foo
def my_test(a):
a=a-1
print(a)
print(my_test)
my_test(10)
打印结果:
函数的装饰器是对函数的参数进行加工或者验证…
下面看一下类的装饰器:
def cls_decorator(**kwargs): #支持传入参数(属性和对应的值),字典形式
def deco(cls):
for key,val in kwargs.items():
setattr(cls,key,val) #给类设置对应的属性和值
return cls
return deco
@cls_decorator(name='Menawey',age=24,gender='male') # 1 运行cls_decorator(...),返回deco;2 @deco===> Peolple = deco(People)
#相当于给People类设置了name、age、gender属性
class People:
pass
print(People.__dict__) #查看被装饰过的类的属性字典
打印结果:
这里给people添加了属性,同样可以修改属性。
def ddt(cls):
cls.name = 'zs'
print(cls)
return cls
@ddt
class TestAddApi():
def __init__(self,name):
self.name = name
print(TestAddApi.__name__)
print(TestAddApi.name)
ls = TestAddApi('ls')
这里可以给每一个实例化的对象进行加工。也就是当你需要给每一个学生创造一个对象或者为每个测试用例创建一个对象的时候。
写的不好,还请多多指导。