TypedDictditerima dengan Python 3.8 melalui PEP 589 . Dari Python, tampaknya __total__bendera boolean disetel ke Truedefault:
tot = TypedDict.__total__
print(type(tot))
print(tot)
# <class 'bool'>
# True
Seperti disebutkan dalam posting lain, perincian tentang metode ini terbatas dalam dokumen , tetapi tautan @Yann Vernier ke kode sumber CPython sangat menyarankan __total__terkait dengan totalkata kunci baru yang diperkenalkan dengan 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
...
Bagaimana cara kerjanya?
Sinopsis : secara default, semua kunci diperlukan saat instantiasi yang ditentukan TypedDict. total=Falsemengesampingkan pembatasan ini dan memungkinkan kunci opsional. Lihat demonstrasi berikut.
Diberikan
Pohon direktori pengujian:

Kode
File dalam direktori tes:
# 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"
Demo
Jika kunci tidak ada, mypy akan mengeluh di commandline:
> mypy code/rgb_bad.py
code\rgb_bad.py:11: error: Key 'a' missing for TypedDict "Color"
...
Pengaturan total=Falsememungkinkan kunci opsional:
> mypy code/rgb_good.py
Success: no issues found in 1 source file
Lihat juga
- Tweet oleh R. Hettinger menunjukkan totalitas
- Bagian PEP tentang totalitas dalam PEP 589
- Bagian Artikel tentang jenis dan
TypedDictdalam Python 3.8 oleh Real Python
typing-extensionspaket untuk digunakan TypedDictdalam Python 3.5, 3.6
typinginternal tidak didokumentasikan, dan bagian yang didokumentasikan dengan buruk.