【发布时间】:2015-01-28 09:43:38
【问题描述】:
考虑例子:
def decorator(func):
def wrapper(*args, **kwargs):
print(args, kwargs)
func(*args, **kwargs)
return wrapper
@decorator
def foo(x, y, z=0):
pass
foo(5, 5)
输出:
(5, 5) {}
为什么不(5, 5) {'z': 0}?如何仅使用装饰器(用于函数)或元类(用于类方法,例如__init__)将函数foo的所有默认值传递给*args或**kwargs?
【问题讨论】:
-
另请注意,如果您使用
foo(5, 5, 42),wrapper会收到(5, 5, 42),但如果您使用foo(5, 5, z=42),它将收到(5, 5), {'z': 42}
标签: python python-3.x decorator default-value metaclass