介绍
给类方法添加装饰器,只需使用@
符号将装饰器直接应用于类方法上。
分类
1,无参装饰器
def decorator(method):
def wrapper(*args, **kwargs):
print("class_method被执行之前")
res = method(*args, **kwargs)
print(res)
print("class_method被执行之后")
return res
return wrapper
class MyClass(object):
def __init__(self):
...
@decorator
def class_method(self, x, y):
return x + y
obj = MyClass()
obj.class_method(2, 3)
输出:
class_method被执行之前
5
class_method被执行之后
调用 class_method
时,装饰器将在class_method
方法调用前后执行,可以看到它们的输出。
2,有参装饰器
def decorator(num):
def wrapper(method):
def inner(*args, **kwargs):
res = method(*args, **kwargs)
for _ in range(num):
print(res)
return res
return inner
return wrapper
class MyClass(object):
def __init__(self):
...
@decorator(3)
def class_method(self, x, y):
return x + y
obj = MyClass()
obj.class_method(2, 3)
输出:
5
5
5
通过 @decorator(3)
带有变量的装饰器应用于 class_method
方法。calss_method
方法被调用三次,然后返回结果。