Python 3.7 - collections.abc

collection.abc - कंटेनरों के लिए सार बेस कक्षाएं




python

collection.abc - कंटेनरों के लिए सार बेस कक्षाएं

संस्करण 3.3 में नया: पूर्व में, यह मॉड्यूल collections मॉड्यूल का हिस्सा था।

स्रोत कोड: Lib/_collections_abc.py

यह मॉड्यूल अमूर्त आधार वर्ग प्रदान करता है जिसका उपयोग यह परीक्षण करने के लिए किया जा सकता है कि क्या कोई वर्ग एक विशेष इंटरफ़ेस प्रदान करता है; उदाहरण के लिए, चाहे वह धोने योग्य हो या चाहे वह मानचित्रण हो।

संग्रह सार आधार वर्ग

संग्रह मॉड्यूल निम्नलिखित एबीसी प्रदान करता है:

एबीसी से इन्हेरिट करता है सार विधियां मिक्सिन मेथड्स
Container __contains__
Hashable __hash__
Iterable __iter__
Iterator Iterable __next__ __iter__
Reversible Iterable __reversed__
Generator Iterator send , throw close , __iter__ , __next__
Sized __len__
Callable __call__
Collection Sized , Iterable , Container __contains__ , __iter__ , __len__
Sequence Reversible , Collection __getitem__ , __len__ __contains__ , __iter__ , __reversed__ , index , और count
MutableSequence Sequence __getitem__ , __setitem__ , __delitem__ , __len__ , insert निहित Sequence तरीके और append , reverse , extend , pop , remove , और __iadd__
ByteString Sequence __getitem__ , __len__ निहित Sequence तरीके
Set Collection __contains__ , __iter__ , __len__ __le__ , __lt__ , __eq__ , __ne__ , __gt__ , __ge__ , __and__ , __or__ , __sub__ , __xor__ , isdisjoint
MutableSet Set __contains__ , __iter__ , __len__ , add , discard इनहेरिट की गई विधियाँ और clear , pop , remove , __ior__ , __iand__ , __ixor__ और __isub__
Mapping Collection __getitem__ , __iter__ , __len__ __contains__ , keys , items , values , get , __eq__ , और __ne__
MutableMapping Mapping __getitem__ , __setitem__ , __delitem__ , __iter__ , __len__ popitem Mapping मेथड्स एंड pop , popitem , clear , update , एंड setdefault
MappingView Sized __len__
ItemsView MappingView , Set __contains__ , __iter__
KeysView MappingView , Set __contains__ , __iter__
ValuesView MappingView , Collection __contains__ , __iter__
Awaitable __await__
Coroutine Awaitable send , throw close
AsyncIterable __aiter__
AsyncIterator AsyncIterable __anext__ __aiter__
AsyncGenerator AsyncIterator asend , athrow aclose , __aiter__ , __anext__
class collections.abc.Container
class collections.abc.Hashable
class collections.abc.Sized
class collections.abc.Callable

कक्षाओं के लिए एबीसी जो क्रमशः __contains__() , __hash__() , __len__() , और __len__() प्रदान करते हैं।

class collections.abc.Iterable

कक्षाओं के लिए एबीसी जो __iter__() विधि प्रदान करता है।

चेकिंग isinstance(obj, Iterable) कक्षाओं का पता लगाता है जो Iterable रूप में पंजीकृत हैं या जिनके पास __iter__() विधि है, लेकिन यह उन वर्गों का पता नहीं लगाता है जो __getitem__() विधि के साथ पुनरावृति करते हैं। यह निर्धारित करने का एकमात्र विश्वसनीय तरीका है कि क्या कोई वस्तु iterable है, इसे iter(obj)

class collections.abc.Collection

आकार में चलने योग्य कंटेनर कक्षाओं के लिए एबीसी।

संस्करण 3.6 में नया।

class collections.abc.Iterator

कक्षाओं के लिए एबीसी जो __iter__() और __next__() विधियों को प्रदान करता है। iterator की परिभाषा भी देखें।

class collections.abc.Reversible

__reversed__() वर्गों के लिए एबीसी जो __reversed__() विधि भी प्रदान करता है।

संस्करण 3.6 में नया।

class collections.abc.Generator

पीईपी 342 में परिभाषित प्रोटोकॉल को लागू करने वाले जनरेटर वर्गों के लिए एबीसी जो प्रेषक send() , throw() और close() तरीकों के साथ पुनरावृत्तियों का विस्तार करता है। generator की परिभाषा भी देखें।

संस्करण 3.5 में नया।

class collections.abc.Sequence
class collections.abc.MutableSequence
class collections.abc.ByteString

केवल पढ़ने के लिए और परस्पर sequences लिए एबीसी।

कार्यान्वयन नोट: __iter__() कुछ तरीके, जैसे कि __iter__() , __reversed__() और index() , अंतर्निहित __getitem__() विधि के लिए बार-बार कॉल करते हैं। नतीजतन, अगर __getitem__() निरंतर पहुंच की गति के साथ लागू किया जाता है, तो __getitem__() विधियों में रैखिक प्रदर्शन होगा; हालाँकि, यदि अंतर्निहित विधि रैखिक है (जैसा कि यह एक लिंक्ड सूची के साथ होगा), तो मिश्रणों का द्विघात प्रदर्शन होगा और संभवतः इसे ओवरराइड करने की आवश्यकता होगी।

संस्करण 3.5 में बदल गया: सूचकांक () विधि ने स्टॉप और प्रारंभ तर्क के लिए समर्थन जोड़ा।

class collections.abc.Set
class collections.abc.MutableSet

केवल पढ़ने के लिए और परिवर्तनशील सेट के लिए एबीसी।

class collections.abc.Mapping
class collections.abc.MutableMapping

केवल पढ़ने के लिए और परिवर्तनशील mappings लिए एबीसी।

class collections.abc.MappingView
class collections.abc.ItemsView
class collections.abc.KeysView
class collections.abc.ValuesView

मैपिंग के लिए एबीसी, आइटम, चाबियाँ, और मूल्यों के views

class collections.abc.Awaitable

await वस्तुओं के लिए एबीसी, जिसका उपयोग await अभिव्यक्तियों में किया जा सकता है। कस्टम कार्यान्वयन को __await__() विधि प्रदान करनी चाहिए।

Coroutine ABC की Coroutine ऑब्जेक्ट्स और इंस्टेंसेस इस ABC के सभी इंस्टेंस हैं।

ध्यान दें

CPython में, जनरेटर-आधारित coroutines (प्रकार जनरेटर के साथ सजाया गया है। types.coroutine() या asyncio.coroutine() ) asyncio.coroutine() हैं, भले ही उनके पास __await__() विधि न हो। उनके लिए isinstance(gencoro, Awaitable) का उपयोग करके False वापसी होगी। inspect.isawaitable() पता लगाने के लिए inspect.isawaitable() का उपयोग करें।

संस्करण 3.5 में नया।

class collections.abc.Coroutine

कोरोटीन संगत कक्षाओं के लिए एबीसी। ये निम्नलिखित विधियों को लागू करते हैं, जो कि Coroutine ऑब्जेक्ट्स में परिभाषित हैं: send() , throw() , और close() । कस्टम कार्यान्वयन को __await__() भी लागू करना चाहिए। सभी Coroutine उदाहरण भी Awaitable उदाहरण हैं। Coroutine की परिभाषा भी देखें।

ध्यान दें

CPython में, जनरेटर-आधारित coroutines (प्रकार जनरेटर के साथ सजाया गया है। types.coroutine() या asyncio.coroutine() ) asyncio.coroutine() हैं, भले ही उनके पास __await__() विधि न हो। उनके लिए isinstance(gencoro, Coroutine) का उपयोग करना False वापसी करेगा। inspect.isawaitable() पता लगाने के लिए inspect.isawaitable() का उपयोग करें।

संस्करण 3.5 में नया।

class collections.abc.AsyncIterable

__aiter__ विधि प्रदान करने वाली कक्षाओं के लिए एबीसी। अतुल्यकालिक पुनरावृत्ति की परिभाषा भी देखें।

संस्करण 3.5 में नया।

class collections.abc.AsyncIterator

कक्षाओं के लिए एबीसी जो __aiter__ और __anext__ तरीके प्रदान करते हैं। एसिंक्रोनस पुनरावृत्त की परिभाषा भी देखें।

संस्करण 3.5 में नया।

class collections.abc.AsyncGenerator

एसिंक्रोनस जनरेटर कक्षाओं के लिए एबीसी जो पीईपी 525 और पीईपी 492 में परिभाषित प्रोटोकॉल को लागू करता है।

संस्करण 3.6 में नया।

ये एबीसी हमें वर्गों या उदाहरणों को पूछने की अनुमति देते हैं यदि वे विशेष कार्यक्षमता प्रदान करते हैं, उदाहरण के लिए:

size = None
if isinstance(myvar, collections.abc.Sized):
    size = len(myvar)

एबीसी के कई मिश्रण भी उपयोगी होते हैं जो कंटेनर एपीआई का समर्थन करने वाले वर्गों को विकसित करना आसान बनाते हैं। उदाहरण के लिए, पूर्ण Set एपीआई का समर्थन करने वाले वर्ग को लिखने के लिए, केवल तीन अंतर्निहित सार विधियों की आपूर्ति करना आवश्यक है: __contains__() , __iter__() , और __len__() । एबीसी शेष तरीकों जैसे __and__() और isdisjoint() आपूर्ति करता है:

class ListBasedSet(collections.abc.Set):
    ''' Alternate set implementation favoring space over speed
        and not requiring the set elements to be hashable. '''
    def __init__(self, iterable):
        self.elements = lst = []
        for value in iterable:
            if value not in lst:
                lst.append(value)

    def __iter__(self):
        return iter(self.elements)

    def __contains__(self, value):
        return value in self.elements

    def __len__(self):
        return len(self.elements)

s1 = ListBasedSet('abcdef')
s2 = ListBasedSet('defghi')
overlap = s1 & s2            # The __and__() method is supported automatically

Set और MutableSet को एक MutableSet रूप में उपयोग करने पर नोट्स:

  1. चूंकि कुछ सेट ऑपरेशन नए सेट बनाते हैं, इसलिए डिफॉल्ट मिक्सिन मेथड्स को चलने-फिरने से नए इंस्टेंस बनाने का तरीका चाहिए। क्लास कंस्ट्रक्टर को ClassName(iterable) के रूप में हस्ताक्षर करने के लिए माना जाता है। उस धारणा को फैक्टर-आउट किया जाता है जिसे _from_iterable() कहा जाता है, जो नए सेट का उत्पादन करने के लिए _from_iterable() कहलाता है। अगर Set मिक्सिन को एक अलग कंस्ट्रक्टर सिग्नेचर के साथ एक क्लास में इस्तेमाल किया जा रहा है, तो आपको _from_iterable() साथ _from_iterable() को ओवरराइड करने की आवश्यकता होगी जो एक पुनरावृत्त तर्क से नए उदाहरण का निर्माण कर सकते हैं।
  2. तुलना को ओवरराइड करने के लिए (संभवतः गति के लिए, जैसा कि शब्दार्थ निश्चित है), __le__() और __ge__() को फिर से परिभाषित करें, फिर अन्य ऑपरेशन स्वचालित रूप से सूट का पालन करेंगे।
  3. Set _hash() सेट के लिए एक हैश मान की गणना करने के लिए एक _hash() विधि प्रदान करता है; हालाँकि, __hash__() को परिभाषित नहीं किया गया है क्योंकि सभी सेट हशेबल या अपरिवर्तनीय नहीं हैं। मिक्स का उपयोग करके सेट हैशबिलिटी को जोड़ने के लिए, दोनों Set और __hash__ = Set._hash Set से वारिस Set , फिर __hash__ = Set._hash परिभाषित करें।

यह भी देखें