【发布时间】:2016-01-21 03:27:04
【问题描述】:
我的问题如下所示:
class foo(obj):
def __init__(self, st='123'):
self.st = st
def process(self, x):
self.st += x
@staticmethod
def do_foo(x, myfoo=None):
if myfoo is None:
myfoo = foo()
myfoo.process(x)
def wrapper(fn, st):
foo_func = foo(st)
foo.do_foo = functools.partial(foo.do_foo, myfoo=foo_func)
fn()
print foo_func.st
return wrap
@wrapper('stst')
def pro():
foo.do_foo('double')
def pro2():
foo.do_foo('double')
pro2() # <--- normal foo.do_foo
pro() # <--- partialed foo.do_foo
pro2() # <--- partialed foo.do_foo
我想创建wrapper 装饰器来包装带有自定义foo 类的静态方法foo.do_foo,并且在pro() 执行之后,这个装饰器能够跨foo 对象做一些工作。即保存变量值。
在上层代码中,包装器如何在全局范围内永久更改foo.do_foo,而不仅仅是在装饰器范围内更改它。
那么如何让foo.do_foo 只在装饰器范围内改变而不是全局?
【问题讨论】:
标签: python static-methods python-decorators