लागू Mapping
ABC। तकनीकी रूप से, भाषा दस्तावेज़ निर्दिष्ट नहीं करते हैं कि Mapping
विधियों का उपयोग किया जाता है, इसलिए मानते हैं कि आपको केवल वर्तमान कार्यान्वयन द्वारा उपयोग किए जाने वाले कुछ सबसेट की आवश्यकता है, यह एक बुरा विचार है। All it says is:
वाक्य रचना ** अभिव्यक्ति समारोह कॉल में प्रकट होता है, अभिव्यक्ति, एक मानचित्रण के लिए मूल्यांकन करना चाहिए जो की सामग्री को अतिरिक्त कीवर्ड तर्क माना जाता है। दोनों अभिव्यक्तियों में दिखाई देने वाले कीवर्ड के मामले में और एक स्पष्ट कीवर्ड तर्क के रूप में, TypeError अपवाद उठाया जाता है।
तो अगर आप Mapping
एबीसी को लागू है, तो आप निश्चित रूप से सही इंटरफेस, आदि
FYI करें, है, चाहे वह .items()
, प्रत्यक्ष यात्रा और __getitem__
कॉल पर निर्भर करता है की परवाह किए बिना जाँच, CPython में व्यवहार पर 3.5 निश्चित रूप से पर निर्भर कैसे आप Mapping
लागू (यदि आप dict
से विरासत, यह एक अनुकूलित रास्ता है कि सीधे dict
आंतरिक तक पहुँचता है, यदि आप नहीं करते हैं, यह .keys()
iterates और प्रत्येक कुंजी को देखता है के रूप में यह हो जाता है का उपयोग करता है)। तो हाँ, कोनों में कटौती मत करो, पूरे एबीसी लागू करें। धन्यवाद Mapping
एबीसी और यह के माता-पिता से विरासत में मिला कार्यान्वयन डिफ़ॉल्ट, इस रूप में छोटे रूप में साथ किया जा सकता:
class MyMapping(Mapping):
def __getitem__(self, key):
...
def __iter__(self):
...
def __len__(self):
...
डिफ़ॉल्ट कार्यान्वयन आप कुछ मामलों में इनकी हो सकता है के वारिस (जैसे items
और values
अर्द्ध बुराई करना होगा पुनरावृत्ति शामिल है और देखो, जहां प्रत्यक्ष एक्सेसर्स आंतरिक के आधार पर तेज़ी से हो सकते हैं), इसलिए यदि आप इसे अन्य उद्देश्यों के लिए उपयोग कर रहे हैं, तो मैं अनुकूलित संस्करणों वाले लोगों को ओवरराइड करने का सुझाव दूंगा।
अति उत्कृष्ट। बहुत बहुत धन्यवाद, पहले कभी 'मैपिंग' के बारे में नहीं सुना था! –