def f(d: dict) -> None: x = d["x"] print(x)
我可以指定此字典必须具有mypy的键“x”吗?我正在寻找类似于interface from typescript的东西,而不是将d改为类.
我不想将d更改为类的原因是因为我正在修改现有的大型代码库以添加mypy类型检查,并且此字典在很多地方使用.如果我必须将d [“x”]的所有实例更改为d.x,我将不得不修改很多代码.
解决方法
我知道你特别不想要这样做,但也许答案是考虑一个不同的数据结构,例如命名元组或数据类,您可以在其中指定类型具有的属性.
这就是typescript声明的作用,真的:
The
printLabel
function has a single parameter that requires that the object passed in has a property calledlabel
of type string.
Python属性是Typescript对象属性的道德等价物.那些Typescript对象符号和Python词典有很多共同之处可能会让人感到困惑,但是在尝试将概念映射到Python时,不应该将Typescript对象声明视为除了类之外的任何东西.
mypy确实包含了不属于Python类型提示标准的输入扩展.这包括mypy_extensions.TypeDict
object,其工作方式与typing.TypeVar
declaration非常相似:
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类型提示检查器中不可用.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。