gpt4 book ai didi

python - Python 3 中的 __total__ dunder 属性是什么意思?

转载 作者:行者123 更新时间:2023-12-03 15:02:23 24 4
gpt4 key购买 nike

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

The type info for introspection can be accessed via Point2D.__annotations__ and Point2D.__total__. [....]



__annotations__众所周知,已在 PEP 3107 中介绍过, 我在 __total__ 上找不到任何信息.谁能解释它的含义,如果可能的话,链接到权威来源?

最佳答案

TypedDict通过 PEP 589 在 Python 3.8 中被接受.在 Python 中,它显示为 __total__是一个设置为 True 的 bool 标志默认情况下:

tot = TypedDict.__total__
print(type(tot))
print(tot)

# <class 'bool'>
# True

如其他帖子所述,此方法的详细信息仅限于 docs。 ,但@Yann Vernier 指向 CPython source code 的链接强烈建议 __total__与新的 total 相关关键字 introduced in Python 3.8 :
# cypthon/typing.py

class _TypedDictMeta(type):
def __new__(cls, name, bases, ns, total=True):
"""Create new typed dict class object.
...
"""
...
if not hasattr(tp_dict, '__total__'):
tp_dict.__total__ = total
...

它是如何工作的?

概要:默认情况下,实例化定义的 TypedDict 时需要所有键。 . total=False覆盖此限制并允许可选键。请参阅以下演示。

给定

测试目录树:

enter image description here

代码

测试目录下的文件:
# rgb_bad.py

from typing import TypedDict


class Color(TypedDict):
r: int
g: int
b: int
a: float


blue = Color(r=0, g=0, b=255) # missing "a"
# rgb_good.py

from typing import TypedDict


class Color(TypedDict, total=False):
r: int
g: int
b: int
a: float


blue = Color(r=0, g=0, b=255) # missing "a"

演示

如果缺少 key ,mypy 将在命令行中提示:
> mypy code/rgb_bad.py
code\rgb_bad.py:11: error: Key 'a' missing for TypedDict "Color"
...

设置 total=False允许可选键:
> mypy code/rgb_good.py
Success: no issues found in 1 source file

另见
  • Tweet R. Hettinger 展示了整体性
  • 政治人物 section PEP 589
  • 中的总体
  • 文章 Section关于类型和 TypedDict在 Python 3.8 中,由 Real Python
  • typing-extensions package使用 TypedDict在 Python 3.5、3.6
  • 关于python - Python 3 中的 __total__ dunder 属性是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58427394/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com