Python使用设置初始化memoizing装饰器

时间:2014-02-16 08:06:21

标签: python memoization

我在库中有一个memoizer装饰器类,如下:

class memoizer(object):
        def __init__(self, f):
            "some code here"
        def __call__(self, *args, **kwargs):
            "some code here"

当我将它用于库中的函数时,我使用@memoizer。但是,我想让客户端(即程序员使用该库)使用一些参数从库外部初始化memoization类,以便它适用于客户端程序中使用的装饰器的所有用途。特别是,这个特定的memoization类将结果保存到文件中,我希望客户端能够指定文件可以占用多少内存。这可能吗?

1 个答案:

答案 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工厂更干净)。