我在库中有一个memoizer装饰器类,如下:
class memoizer(object):
def __init__(self, f):
"some code here"
def __call__(self, *args, **kwargs):
"some code here"
当我将它用于库中的函数时,我使用@memoizer
。但是,我想让客户端(即程序员使用该库)使用一些参数从库外部初始化memoization类,以便它适用于客户端程序中使用的装饰器的所有用途。特别是,这个特定的memoization类将结果保存到文件中,我希望客户端能够指定文件可以占用多少内存。这可能吗?
答案 0 :(得分:1)
你可以使用装饰工厂实现这个目的:
class DecoratorFactory(object):
def __init__(self, value):
self._value = value
def decorator(self, function):
def wrapper(*args, **kwargs):
print(self._value)
return function(*args, **kwargs)
return wrapper
factory = DecoratorFactory("shared between all decorators")
@factory.decorator
def dummy1():
print("dummy1")
@factory.decorator
def dummy2():
print("dummy2")
# prints:
# shared between all decorators
# dummy1
dummy1()
# prints:
# shared between all decorators
# dummy2
dummy2()
如果您不喜欢工厂,可以在某个模块中创建全局变量,并在使用装饰器之前设置它们(不是很好的解决方案,IMO工厂更干净)。