所以,我想修改json.loads()函数来接受一个新的关键字参数,但不要让它只是kwargs的一部分。 换句话说,我希望它是函数签名的明确部分。
这是我对如何做到这一点的猜测。 有更好的方法吗?
def json_to_python_syntax(json_method):
"""
Translate JSON-conforming key names to Pythonic standards on dict.
The goal of this decorator is to add a standard keyword parameter
'convert_syntax' onto the method. But, I'm not sure how to do this.
"""
@wraps(json_method)
def wrapper(json_string, convert_syntax=False, **kwargs):
pythonic_dict = dict()
json_syntax_dict = json_method(json_string, **kwargs)
if not convert_syntax:
return json_syntax_dict
for key, value in json_syntax_dict.iteritems():
for json_syntax in re.finditer(r'[A-Z]', key):
key = key.replace(
json_syntax.group(), '_' + json_syntax.group()[0].lower())
pythonic_dict[key] = value
return pythonic_dict
return wrapper
我对这个方法的关注是,这个猴子在json.loads中具有预期的关键字参数顺序(它使得convert_syntax成为json字符串之后的第一个预期参数)并且可能搞乱其他对更大的json.loads的调用承担标准订单的程序。
答案 0 :(得分:0)
看到你的更改打破了json.loads
的预期签名并且你关注它打破了依赖于原始签名的其他代码,我同意Simeon Visser,看起来你不应该这样做一点都不。
只有你编写的代码才能正确调用你的新方法,那么为什么不给你的方法一个不同的名字,而不是装饰一个现有的方法呢?如果要阻止其他代码在没有convert_syntax
标志的情况下调用此方法,请完全避免导入json
模块,而是导入包装json
模块的json库。 / p>