首页 > 解决方案 > Python 3 中的 __total__ dunder 属性是什么意思?

问题描述

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

自省的类型信息可以通过Point2D.__annotations__和访问Point2D.__total__。[……]

虽然__annotations__众所周知,已在PEP 3107中引入,但我找不到任何关于__total__. 谁能解释它的含义,如果可能的话,链接到权威来源?

标签: pythonpython-3.xpython-typing

解决方案


我猜该__total__字段表示实例是否必须完整(默认)或不(所有字段可选)。我从PEP 589开始搜索,它介绍TypedDict并描述了整体性。它使用了一个参数,为 语法total重命名 dunder-style 是有意义的。class但是,我没有找到这样的重命名发生的时间。

查看 MyPy,它是关心这些注释的实际类型检查器,在和 totality上有类似的文档TypedDict,但同样没有引用 dunder 语法。深入研究它的实现会导致更多的混乱,因为TypedDictTypetypes.py没有一个总字段,而是单独的itemsand required_keys。Totality 会暗示这一点,items.keys()==required_keys但实现会做出不同的假设,例如单独can_be_false依赖。原则上应该意味着是空的。itemstotal=Falserequired_keys

_TypedDictMeta的 CPython 源代码至少表明total参数和__total__dunder 是相同的,尽管源代码将TypedDict自己描述为“可能很快会添加”。


推荐阅读