TypedDict
PEP 589 aracılığıyla Python 3.8'de kabul edildi . Python'dan, __total__
bir boole bayrağıTrue
varsayılan olarak :
tot = TypedDict.__total__
print(type(tot))
print(tot)
# <class 'bool'>
# True
Diğer gönderilerde belirtildiği gibi, bu yöntemle ilgili ayrıntılar dokümanlar ile sınırlıdır , ancak @Yann Vernier'in CPython kaynak koduna güçlü bir şekilde bağladığı , Python 3.8'de sunulan__total__
yeni total
anahtar kelimeyle ilgilidir :
# 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
...
O nasıl çalışır?
Özet : varsayılan olarak, tanımlı bir örneği başlatırken tüm anahtarlar gereklidir TypedDict
. total=False
bu kısıtlamayı geçersiz kılar ve isteğe bağlı anahtarlara izin verir. Aşağıdaki gösteriye bakın.
verilmiş
Bir test dizini ağacı:
kod
Test dizinindeki dosyalar:
# 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"
gösteri
Bir anahtar eksikse, mypy komut satırında şikayet edecektir:
> mypy code/rgb_bad.py
code\rgb_bad.py:11: error: Key 'a' missing for TypedDict "Color"
...
Ayar total=False
isteğe bağlı tuşlara izin verir:
> mypy code/rgb_good.py
Success: no issues found in 1 source file
Ayrıca bakınız
typing
İç kısımların% 99'u belgelenmemiştir ve belgelenen kısım belgelenmemiştir.