Python 3中__total__ dunder属性的含义是什么?

Ant*_*ala 16 python python-3.x python-typing

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

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

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

Yan*_*ier 5

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

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

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