collections.abc
मॉड्यूल Mapping
, Sequence
जैसी चीजों के लिए इंटरफ़ेस को परिभाषित करता है, और इसी तरह।
उस मॉड्यूल में सार आधार वर्गों से विरासत प्राप्त करके, आपको कुछ विधियों के डिफ़ॉल्ट कार्यान्वयन मिलते हैं।
class MyMapping(collections.abc.Mapping):
def __getitem__(self, item)
def __iter__(self)
def __len__(self)
Mapping
से विरासत आप 'निःशुल्क' dict
की उपयोगी तरीकों के अधिकांश के कार्यान्वयन मिल जाएगा: तो एक Mapping
, अपने वर्ग परिभाषा कुछ इस तरह दिखना चाहिए पर विचार किया जाएगा
keys
items
values
get
__eq__
__ne__
इन डिफ़ॉल्ट विधि कार्यान्वयन कस्टम डेटा संरचना के साथ अक्षम हैं, तो आप हमेशा उन्हें अपने खुद के संस्करणों के साथ ओवरराइड कर सकते हैं।
एक MutableMapping
पर विचार किया जा करने के लिए, अपने वर्ग के इंटरफ़ेस इस तरह दिखना चाहिए:
class MyMutableMapping(collections.abc.MutableMapping):
def __getitem__(self, item)
def __setitem__(self, item)
def __delitem__(self, item)
def __iter__(self)
def __len__(self)
MutableMapping
से विरासत हो जाता है आप 'निःशुल्क' Mapping
के तरीकों के सभी की परिभाषा, प्लस:
pop
popitem
clear
update
setdefault
आप स्क्रैच से 'अपने खुद के रोलिंग' कर रहे हैं और एक सार आधार वर्ग का उपयोग नहीं करना चाहते हैं, तो आप शायद परिभाषित करने के लिए प्रयास करना चाहिए उपरोक्त विधियों के सभी, यदि आप चाहते हैं कि आपकी कक्षा dict
के लिए सख्ती से Liskov-substitutable हो।
स्रोत
2013-11-04 19:45:10
यह सही लगता है, धन्यवाद!काश वे उस पृष्ठ पर कहीं भी कीवर्ड मैपिंग प्रोटोकॉल का इस्तेमाल किया था। – Chris
यदि आप जानते हैं कि आपने अपने विशिष्ट उपयोग के लिए पर्याप्त मैपिंग प्रोटोकॉल लागू किया है, लेकिन नियमित मैपिंग चेक पास करने के लिए पर्याप्त नहीं है, तो आप 'collections.Mapping.register (MyMappingLikeClass) 'का भी उपयोग कर सकते हैं। – Blckknght
@ ब्लैकनघट: "नियमित मैपिंग चेक" क्या हैं? –