如何正确获取装饰器的默认关键字参数?

时间:2019-04-09 04:07:54

标签: python decorator kwargs

我正在将装饰器应用于某些函数,并且装饰器将在函数中需要一些参数。但是,我将为参数分配一些默认值。装饰器使用*args, **kwargs接收参数。

def decorator(fn):
    def wrapper(*args, **kwargs):
        print(args)
        print(kwargs)
        # do something with the required1 and required2 ...
        return fn(*args, **kwargs)
    return wrapper

class MyClass(object):
    def foo(self, a, b, required1=0, required2='x'):
        pass

但是以不同的方式调用该函数时,装饰器包装器将收到不同的参数

A = MyClass()
A.foo(1, 2, 3, '4') # 1
A.foo(1, 2) # 2
A.foo(1, 2, required1=3, required2='4') # 3

输出如下:

#1 
args: [<object at 0x0000>, 1, 2, 3, ‘4’]
kwargs: {}
#2
args: [<object at 0x0000>, 1, 2]
kwargs: {}
#3
args: [<object at 0x0000>, 1, 2]
kwargs: {‘required1’: 3, ‘required2’: ‘4’}

无论调用该函数的方式如何,如果要访问诸如r = kawrgs[‘required1’]之类的必需参数,应该怎么办?

1 个答案:

答案 0 :(得分:2)

我尝试在我的一个项目中解决此问题。我发现的唯一方法是使用python的自省。

代码如下:

foreach ($myArray['docs'] as $post) {
            echo "<tr>";
            echo "<td>";
            echo($post['sourceResource']['creator'][0]);
            echo "<td>";
            echo($post['sourceResource']['description'][0]);
            echo "</tr>";
            break;

将函数的绑定收入参数(无论是否带有关键字)绑定到函数的已定义名称

相关问题