TypedDictzostał zaakceptowany w Pythonie 3.8 przez PEP 589 . Z Python wygląda na __total__to, że flaga logiczna jest ustawiona Truedomyślnie na:
tot = TypedDict.__total__
print(type(tot))
print(tot)
# <class 'bool'>
# True
Jak wspomniano w innych postach, szczegółowe informacje na temat tej metody są ograniczone w dokumentach , ale link @ Yanna Verniera do kodu źródłowego CPython zdecydowanie sugeruje, że __total__jest powiązany z nowym totalsłowem kluczowym wprowadzonym w Pythonie 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
...
Jak to działa?
Streszczenie : domyślnie wszystkie klucze są wymagane przy tworzeniu zdefiniowanej instancji TypedDict. total=Falsezastępuje to ograniczenie i zezwala na klucze opcjonalne. Zobacz następującą demonstrację.
Dany
Testowe drzewo katalogów:

Kod
Pliki w katalogu testowym:
# 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"
Próbny
Jeśli brakuje klucza, mypy narzeka w wierszu poleceń:
> mypy code/rgb_bad.py
code\rgb_bad.py:11: error: Key 'a' missing for TypedDict "Color"
...
Ustawienie total=Falsepozwala na opcjonalne klucze:
> mypy code/rgb_good.py
Success: no issues found in 1 source file
Zobacz też
- Tweetuj R. Hettinger demonstrując całość
- Sekcja PEP na temat całości w PEP 589
- Sekcja artykułów na temat typów i
TypedDictPython 3.8 autorstwa Real Python
typing-extensionspakiet do użycia TypedDictw Python 3.5, 3.6
typingwewnętrznych nie jest udokumentowane, a część, która jest udokumentowana słabo.