python – mypy设置字典键/接口
假设我有一个将字典作为参数的函数:
def f(d: dict) -> None: x = d["x"] print(x) 我可以指定此字典必须具有mypy的键“x”吗?我正在寻找类似于interface from typescript的东西,而不是将d改为类. 我不想将d更改为类的原因是因为我正在修改现有的大型代码库以添加mypy类型检查,并且此字典在很多地方使用.如果我必须将d [“x”]的所有实例更改为d.x,我将不得不修改很多代码. 解决方法
不,通过键入(PEP 484和PEP 526),您无法声明特定键将出现在容器中.您可以声明的只是类型,而不是运行时内容. ‘x’是特定的字符串值,而不是类型.
我知道你特别不想要这样做,但也许答案是考虑一个不同的数据结构,例如命名元组或数据类,您可以在其中指定类型具有的属性. 这就是typescript声明的作用,真的:
Python属性是Typescript对象属性的道德等价物.那些Typescript对象符号和Python词典有很多共同之处可能会让人感到困惑,但是在尝试将概念映射到Python时,不应该将Typescript对象声明视为除了类之外的任何东西. mypy确实包含了不属于Python类型提示标准的输入扩展.这包括 from mypy_extensions import TypedDict SomeDict = TypeDict('SomeDict',{'x': str}) def f(d: SomeDict) -> None: x = d['x'] print(x) 或使用基于类的语法: class SomeDict(TypeDict) x: str TypeDict声明中的键要么全部都需要,要么全部是可选的(当你在声明中设置total = False时);你必须使用继承来生成一些带有可选键的类型,请参阅链接的文档. 但请注意,TypeDict是实验性的,可以在将来的mypy版本中再次删除或大幅改变,并且在其他Python类型提示检查器中不可用. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |