Python用设置初始化记忆装饰器

2024-09-26 22:50:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我在一个图书馆里开了一个回忆录装饰课,比如:

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

当我将它用于库中的函数时,我使用@memoizer。但是,我希望客户机(即使用库的程序员)用一些参数从库外部初始化memoization类,这样它就可以容纳客户机程序中使用的decorator的所有用途。特别是,这个特殊的记忆类将结果保存到一个文件中,我希望客户机能够指定文件可以占用多少内存。这可能吗?在


Tags: 文件self客户机hereobject图书馆initdef
1条回答
网友
1楼 · 发布于 2024-09-26 22:50:35

您可以使用decorator factory来实现:

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()

如果你不喜欢工厂,你可以在一些模块中创建全局变量,并在使用我们的decorator之前设置它们(不是很好的解决方案,IMO工厂更干净)。在

相关问题 更多 >

    热门问题