TypedDict
PEP 589 के माध्यम से पायथन 3.8 में स्वीकार किया गया था । पायथन से, ऐसा प्रतीत होता है __total__
कि एक बूलियन ध्वज True
डिफ़ॉल्ट रूप से सेट है :
tot = TypedDict.__total__
print(type(tot))
print(tot)
# <class 'bool'>
# True
जैसा कि अन्य पोस्ट में बताया गया है, इस पद्धति पर विवरण डॉक्स में सीमित हैं , लेकिन @Yann Vernier का CPython स्रोत कोड से लिंक होना दृढ़ता से बताता __total__
है कि पायथन 3.8 में पेश किए गए नए total
कीवर्ड से संबंधित है :
# 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
इस प्रतिबंध को ओवरराइड करता है और वैकल्पिक कुंजी की अनुमति देता है। निम्न प्रदर्शन देखें।
दिया हुआ
एक परीक्षण निर्देशिका पेड़:
कोड
परीक्षण निर्देशिका में फ़ाइलें:
# 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"
डेमो
यदि कोई चाबी गायब है, तो 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
यह सभी देखें
- समग्र रूप से प्रदर्शन करने वाले आर। हेटिंगर द्वारा ट्वीट
- पीईपी 589 में समग्रता पर पीईपी अनुभाग
- रियल पायथन द्वारा प्रकार और पायथन 3.8 में अनुच्छेद अनुभाग
TypedDict
typing-extensions
TypedDict
पायथन 3.5, 3.6 में उपयोग करने के लिए पैकेज
typing
इंटर्नल का दस्तावेजीकरण नहीं किया गया है, और जो हिस्सा है वह खराब तरीके से प्रलेखित है।