我正在尝试找出如何在不使用Dict[str, str]
的情况下为传递给函数的字典参数提供类型提示,因为它不能提供键是什么。
到目前为止,我已经尝试了两种方法,一种是使用typing_extensions
,以便与3.6兼容,另一种是使用pydantic
,但我无法显示提示。
考虑以下示例代码:
from typing_extensions import TypedDict
from pydantic import BaseModel
class Some(TypedDict):
"""keya is some key"""
keya: str
"""another_key is another key"""
another_key: str
def some(a: Some) -> None:
print(a.get('keya'))
return None
some({'keya': 'key', 'another_key': 'nonething'})
如预期的那样,some
函数的类型提示显示了类型Some
,但没有显示其键。
我的目标是两件事:
- 在函数参数为字典时提供键提示(最重要的)
- 使用Sphinx生成文档,以便在文档中反映键。
编辑
正如其中一条评论所指出的那样,我可以通过使用**kwargs
在一定程度上达到这个目的,但这不是我的意图。设置**kwargs
也不会给我类型提示。
some(**some_dict)
。 - Blckknght**kwargs
绕过这个问题,但这不是本意。问题更多地是围绕着是否能够做到这一点,如果不能,我也理解。 - securisec**kwargs
不能将有效键的类型提示显示给用户,我的示例在此帖子中进行了简化。如果函数需要10个参数,其中包含字典、列表和字符串混合,那么我无法完成我想要完成的工作。 - securisec**kwargs
,而是直接将keya, another_key
作为函数的参数。然后可以通过some(**d)
将包含这些键的字典传递给函数。 - Mad Physicist**kwargs
分别处理输入中缺失或额外的键。 - Mad Physicist