TypedDict को PEP-589 में पेश किया गया था और इसे Python 3.8 में जोड़ा गया। इसका उपयोग मुख्य रूप से dictionary के लिए type annotations बनाने में होता है।
dataclass या pydantic का उपयोग करके 'record' type data को व्यक्त करने के बजाय, TypedDict dictionary की flexibility का लाभ उठाता है और उन स्थितियों में फ़ायदेमंद है जहाँ कुछ fields गायब हो सकती हैं।
- उदाहरण के लिए,
Movie class को define करना और movie variable में Movie type की dictionary assign करना
class Movie(TypedDict):
title: str
movie: Movie = {"title": "Avatar"}
Non-totality
TypedDict non-totality को support करता है, यानी यह दिखा सकता है कि कुछ fields गायब हो सकती हैं। HTTP PATCH endpoint implement करते समय यह उपयोगी है।
dataclass में field omission की ऐसी कोई अवधारणा नहीं होती, इसलिए यह थोड़ा असहज लग सकता है।
TypedDict में total=False सेट करके field omission को लचीले ढंग से handle किया जा सकता है।
- PEP-655 में
Required और NotRequired के ज़रिए individual fields को चिह्नित किया जा सकता है।
TypedDict का **kwargs के रूप में उपयोग
- PEP-692
TypedDict का उपयोग करके variable keyword arguments को input करने की अनुमति देता है।
TypedDict का उपयोग करने पर code थोड़ा verbose लग सकता है, लेकिन कई function definitions में reuse करने पर यह उपयोगी होता है।
- Non-totality के साथ इस्तेमाल करने पर इसकी ताकत और बढ़ जाती है।
- जैसे
pytest.fixture को customize करते समय कुछ arguments को वैसे ही आगे pass करने वाले scenarios
- Sentinel value के साथ मिलती-जुलती behavior implement की जा सकती है, लेकिन type annotations असहज हो सकती हैं।
dependency injection में TypedDict का उपयोग
- PEP-692
TypedDict का उपयोग करने वाले function calls में type checking को संभव बनाता है।
- यह उन स्थितियों में उपयोगी है जहाँ कई resources कुछ dependencies साझा करते हैं।
- ऐसा
TypedDict define किया जाता है जो सभी resources के kwargs को मिलाकर बने रूप जैसा हो।
- फिर resources को arbitrary arguments लेने के लिए rewrite किया जाता है और
TypedDict के साथ dependency injection किया जाता है।
- type system के ज़रिए dependency injection के दौरान argument errors या missing values की जाँच की जा सकती है।
- resources के signature बदलना आदर्श नहीं है, लेकिन dependency injection framework की तुलना में यह छोटा बदलाव है।
- कई frameworks अभी भी static type checking को support नहीं करते।
आगे आने वाली सुविधाएँ
- PEP-728 extra items के type को define करने और extra items की अनुमति न देने वाली closed dictionaries को define करना संभव बनाता है
- इससे record types को अधिक सटीक रूप से define करने में मदद मिलती है।
- PEP-705 read-only items को निर्दिष्ट करना संभव बनाता है (घोषणा के समय के अनुसार यह शायद पहले ही जारी हो चुका हो)
- यह उन स्थितियों को संभालने में मदद करता है जहाँ सहज रूप से compatible लगने वाले अलग-अलग
TypedDict के बीच संभावित mutation (deletion) के कारण समस्याएँ हो सकती हैं।
GN⁺ की संक्षिप्त टिप्पणी
TypedDict dictionary की flexibility का लाभ उठाता है और उन स्थितियों में फ़ायदेमंद है जहाँ कुछ fields गायब हो सकती हैं।
TypedDict, dataclass या pydantic जैसी अन्य data structures की तुलना में अधिक flexible विकल्प देता है।
- अपने domain के अनुसार सही tool चुनें, लेकिन
TypedDict के फ़ायदों को भी ध्यान में रखें
2 टिप्पणियां
अगर data बाहरी स्रोत से JSON फ़ॉर्म में आता है या अक्सर Python के बाहर export करना पड़ता है, तो TypedDict का उपयोग करना अच्छा है। इसके अलावा, structured
dataclassयाNamedTupleका उपयोग करने की सलाह दी जाती है।Hacker News की राय
dynamic typing को पसंद करने वाले लोग धीरे-धीरे type system की अहमियत समझ रहे हैं
TypedDictकी जगहdataclass(slots=True)इस्तेमाल करने के कारण["foobar"]की जगह.foobarइस्तेमाल करने से कलाई पर कम दबाव पड़ता हैअगर type को enforce करने वाला system नहीं है, तो
TypedDictकोई काम नहीं करताPydanticजैसे tool का इस्तेमाल करना पड़ता है"thank you think" जैसा शीर्षक ज़रूरत से ज़्यादा रूखा लगता है
subscription से जुड़े वाक्य में "None" का मतलब साफ़ नहीं है
TypedDictके बारे में व्यक्तिगत अनुभवTypedDictका इस्तेमाल कियाTypedDictकी functionality अच्छी है, लेकिन declaration syntax जटिल है