冻结函数参数

Freezing Function Arguments

我正在尝试编写一个 class 来提供输入函数的功能,但会记住上次调用的参数,并且只会像字典一样更新它们。到目前为止我已经有了这个,但我很想知道是否有更好的方法:

class freezefunc:
    def __init__(self, func, **funcargs):
        self.func = func
        self.funcargs = {}

    def call(self, **kwargs):
        self.funcargs.update(kwargs)
        self.func(**self.funcargs)

那么这就是这样工作的:

def func(a):
    print a
frozenfunc = freezefunc(func)
frozenfunc.call(a='somevalue')

打印:一些值

frozenfunc.call(a='theupdatedvalue')

打印:更新值

是否有类似的东西我只是没有找到?

UPDATDE:函数 partial from the library functools 执行非常相同的任务。

特殊方法__call__让你直接调用frozenfunc:

class freezefunc:
    def __init__(self, func, **funcargs):
        self.func = func
        self.funcargs = {}

    def __call__(self, **kwargs):
        self.funcargs.update(kwargs)
        return self.func(**self.funcargs)

def func(a):
    print(a)

现在:

frozenfunc = freezefunc(func)
frozenfunc(a='somevalue')

打印:

somevalue

和:

frozenfunc(a='theupdatedvalue')

打印:

theupdatedvalue