【发布时间】:2014-10-04 11:49:59
【问题描述】:
我想知道 Python 中是否有一种方法可以让包装器在函数的参数已经被解析为参数后访问它们。因此,例如,我想包装两个具有不同(数量)参数的函数:
def fn_1(a, b=None, config=None):
...
def fn_2(b=None, config=None):
...
我希望 like 让我的包装器查看 config 是否有值,如果没有,则从其他地方加载它:
class with_config(object):
def __init__(self, f):
self.f = f
def __call__(self, *args, **kwargs):
if config not in kwargs:
kwargs[config] = load_config_from_some_default_location()
但我不知道如何确定config 是否已按位置传递,因为它在args 列表中的位置可能因函数而异。
如果我可以得到参数之后,位置参数已根据参数命名(例如,第一个位置分配给a,第二个分配给b,第三个分配给@987654329 @) 我会没事的。
情况比这稍微复杂一些,但我认为这解决了我的问题。
有什么建议吗?
【问题讨论】:
-
我不知道我是怎么错过this similar post 的,但我猜这是我能做的最好的了。任何有更多想法的人都可以加入。
标签: python arguments wrapper decorator