【发布时间】:2017-03-13 21:05:36
【问题描述】:
我希望在函数上使用装饰器。问题是装饰器函数是在一个类中定义的,它必须特定于该类的一个对象。例如:
class Foo:
def __init__(self):
self.a = 1
def set_a(self, val):
self.a = val
def bar(func):
def _args(*args, **kwargs):
func(*args, **kwargs) + self.a
return _args
if __name__ == "__main__":
foo = Foo()
foo2 = Foo()
foo.set_a = 2
@foo.bar
def multip(a, b):
return a * b
multip(1, 2) # here i would expect answer to be 4
foo.set_a = 3
multip(1, 2) # here i would expect answer to be 5
@foo2.bar
def multip2(a, b):
return a * b
multip2(1, 2) # here i would expect the answer to be 3
【问题讨论】:
-
“特定于该类的对象”是什么意思?您已经拥有的代码和您想要拥有的代码之间有什么区别? (请注意,您忘记了
bar上的self参数。)