在新发布的Python 3.8中,有一个新的类型注释typing.TypedDict。其文档中提到


可以通过Point2D.__annotations__Point2D.__total__访问用于自省的类型信息。 [....]


尽管__annotations__是众所周知的,但已在PEP 3107中进行了介绍,但我找不到有关__total__的任何信息。谁能解释它的含义,并在可能的情况下链接到权威资料来源?

最佳答案

我猜想__total__字段表示实例是否必须完整(默认值)(所有字段可选)。我从PEP 589开始搜索,该搜索引入了TypedDict并以此描述整体。它使用了一个total参数,将class语法重命名为dunder-style很有意义。但是,我没有发现何时进行这样的重命名。

查看MyPy(这是关心这些批注的实际类型检查器),这里有similar documentation on TypedDict and totality,但同样没有引用dunder语法。深入研究其实现会导致更多的混乱,因为TypedDictType in types.py没有总字段,而是将itemsrequired_keys分开。总计将暗示items.keys()==required_keys,但是该实现会做出不同的假设,例如can_be_false仅依赖itemstotal=False原则上应表示required_keys为空。

尽管total本身描述为“可能很快添加”,但_TypedDictMeta的CPython源代码至少揭示了__total__参数和TypedDict dunder是相同的。

关于python - Python 3中__total__ dunder属性的含义是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58427394/

10-12 17:45