9

我试图找出一种方法来循环遍历 json 配置文件并使用键名作为使用 **kwargs 的方法的参数名称。我创建了一个 json 配置文件并使用键名作为方法。我只是将“set_”附加到键名来调用正确的方法。我将 json 转换为字典以遍历任何默认值。我想通过字符串变量将参数名称传递给 **kwargs。我试图通过字典,但它似乎不喜欢那样。

user_defaults = config['default_users'][user]

for option_name, option_value in user_defaults.iteritems():
    method = "set_" + option_name
    callable_method = getattr(self, method)
    callable_method(user = user, option_name = user_defaults[option_name])

调用上面的 callable_method 传递“option_name”作为 kwarg 的实际名称。我想传递它,以便当“shell”= option_name 它作为参数名称的字符串名称传递时。下面是一个例子。这样我就可以遍历配置中的任何键,而不必担心我在为完成某件事而编写的任何方法中要查找的内容。

def set_shell(self, **kwargs): 
    user  = kwargs['user']
    shell = kwargs['shell']

    ## Do things now with stuff

感谢任何帮助我是python的新手,并且仍在学习如何以pythonic的方式做事。

4

1 回答 1

27

如果我正确理解您的要求,您可以使用**调用方的语法来传递一个转换为 kwargs 的 dict。

callable_method(user=user, **{option_name: user_defaults[option_name]})
于 2013-04-11T13:26:22.060 回答