5 पॉइंट द्वारा GN⁺ 2024-10-14 | 2 टिप्पणियां | WhatsApp पर शेयर करें
  • 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 टिप्पणियां

 
ilotoki0804 2024-10-15

अगर data बाहरी स्रोत से JSON फ़ॉर्म में आता है या अक्सर Python के बाहर export करना पड़ता है, तो TypedDict का उपयोग करना अच्छा है। इसके अलावा, structured dataclass या NamedTuple का उपयोग करने की सलाह दी जाती है।

 
GN⁺ 2024-10-14
Hacker News की राय
  • dynamic typing को पसंद करने वाले लोग धीरे-धीरे type system की अहमियत समझ रहे हैं

    • बेहतर type system, खराब type system से बेहतर होता है
  • TypedDict की जगह dataclass(slots=True) इस्तेमाल करने के कारण

    • property access तेज़ होता है, इसलिए code भी तेज़ चलता है
    • slot class कम RAM इस्तेमाल करती है, और L1 cache पर दबाव कम होता है, इसलिए code तेज़ चलता है
    • property access करते समय ["foobar"] की जगह .foobar इस्तेमाल करने से कलाई पर कम दबाव पड़ता है
    • property name गलत टाइप करने पर runtime error होता है
  • अगर type को enforce करने वाला system नहीं है, तो TypedDict कोई काम नहीं करता

    • string से annotated property में गलती से कुछ भी store कर दें, तो basic Python इसे रोकता या warn नहीं करता
    • type को वास्तव में enforce करने के लिए Pydantic जैसे tool का इस्तेमाल करना पड़ता है
  • "thank you think" जैसा शीर्षक ज़रूरत से ज़्यादा रूखा लगता है

    • "than i thought" पढ़ने में ज़्यादा अच्छा लगता है
  • subscription से जुड़े वाक्य में "None" का मतलब साफ़ नहीं है

    • grammar जटिल है, इसलिए समझना मुश्किल है
  • TypedDict के बारे में व्यक्तिगत अनुभव

    • code की readability बढ़ाने के लिए dicts पर annotation देने में TypedDict का इस्तेमाल किया
    • code path को trace करने में लगने वाला समय कम हो गया
    • और बेहतर coding skill की ज़रूरत है, लेकिन dict का बहुत इस्तेमाल करने वाले apps में यह अच्छा समाधान है
  • TypedDict की functionality अच्छी है, लेकिन declaration syntax जटिल है