【发布时间】:2017-12-07 06:33:54
【问题描述】:
在下面的代码中,Test 类的方法(print_a 和 print_b)已被两个不同的装饰器装饰。
我如何确定给定的方法(比如说print_a)在运行时被一些特定的装饰器(decorator1)装饰?
简单的解决方案是更改包装函数的名称,即在装饰器方法中将wrapper 更改为wrapper1 和wrapper2,但问题是我无法控制那部分的代码。
python 有没有类似 Java 的反射 API,这对我有帮助吗?
def my_decorator1(func):
def wrapper(*args, **kwargs):
print('I am decorated:1')
func(*args, **kwargs)
return wrapper
def my_decorator2(func):
def wrapper(*args, **kwargs):
print('I am decorated:2')
func(*args, **kwargs)
return wrapper
class Test():
def __init__(self, a=None, b=None):
self.a = a
self.b = b
@my_decorator1
def print_a(self):
print('Value of a is {}'.format(self.a))
@my_decorator2
def print_b(self):
print('Value of b is {}'.format(self.b))
if __name__ == '__main__':
d = Test.__dict__
f1 = d.get('print_a')
f2 = d.get('print_b')
【问题讨论】:
标签: python decorator python-decorators