Python Decorator覆盖函数参数

用户名

我正在尝试编写一个python装饰器来覆盖函数参数,但是我真的迷失在inner()函数中。在这里修改args的正确方法是什么?

  def override(*override_args, **override_kwargs): 
        def outer(f): 
            def inner(*args, **kwargs): 
                ...
                ...
            return inner
        return outer

    @override('Cat')
    def my_function(animal, **kwargs): 
        print animal
        print kwargs

    my_function('Mouse', k1='1', k2='10') 
瓦伦斯
def override(*override_args, **override_kwargs):
    def outer(f):
        def inner(*args, **kwargs):
            min_args_length = min(len(args), len(override_args))
            args = list(args)
            for i in xrange(min_args_length):
                args[i] = override_args[i]
            kwargs.update(override_kwargs)
            return f(*args, **kwargs)
        return inner
    return outer

@override('Cat', 'male', k1='0')
def my_function(animal, **kwargs):
    print animal
    print kwargs

my_function('Mouse', k1='1', k2='10')

输出:

Cat
{'k2': '10', 'k1': '0'}

说明:

args是一个包含没有名称的args的元组,我们最多可以覆盖其中的min(len(args),len(override_args))。

kwargs是一个字典,其中包含名为args的键:值对。只需将override_kwargs更新为kwargs

我强烈建议您仅覆盖命名参数“ kwargs”,以防止参数不匹配。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章