GeezerVisonThe World Wide Web, restored to 800 pixels of glory. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Home|About|Gaming cabinet|Archives|How it works|Starter sites | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GeezerVison is showing python.github.io — collections.abc --- کلاسهای پایه انتزاعی برای ظروف
|
ABC |
به ارث میبرد از |
متدهای انتزاعی |
متدهای میکساین |
|---|---|---|---|
|
|||
|
|||
|
|||
|
|
||
|
|||
|
|
||
|
|||
|
|||
|
|||
|
|
||
|
متدهای به ارث رسیده از |
||
|
متدهای موروثی |
||
|
|
||
|
متدهای بهارثرسیده از |
||
|
|
||
|
متدهای بهارثرسیده از |
||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|
||
|
|||
|
|
||
|
|
||
|
پانویسها
کلاس پایه انتزاعی (ABC) برای کلاسهایی که متد __contains__() را فراهم میکنند.
کلاس پایه انتزاعی (ABC) برای کلاسهایی که متد __hash__() را ارائه میدهند.
کلاس پایه انتزاعی (ABC) برای کلاسهایی که متد __len__() را فراهم میکنند.
ABC برای کلاسهایی که متد __call__() را فراهم میکنند.
برای جزئیات دربارهی نحوهی استفاده از Callable در حاشیهنویسیهای نوع، حاشیهنویسی اشیاء فراخوانیپذیر را ببینید.
کلاس پایه انتزاعی (ABC) برای کلاسهایی که متد __iter__() را فراهم میکنند.
بررسی isinstance(obj, Iterable) کلاسهایی را که بهعنوان Iterable ثبت شدهاند یا دارای متد __iter__() هستند تشخیص میدهد، اما کلاسهایی را که پیمایش آنها از طریق متد __getitem__() انجام میشود تشخیص نمیدهد. تنها راه قابلاطمینان برای تشخیص اینکه آیا یک شیء پیمایشپذیر است، فراخوانی iter(obj) است.
کلاس پایه انتزاعی (ABC) برای کلاسهای ظرف اندازهدار و پیمایشپذیر.
اضافه شده در نسخهی 3.6.
ABC برای کلاسهایی که متدهای __iter__() و __next__() را فراهم میکنند. همچنین تعریف iterator را ببینید.
ABC برای کلاسهای پیمایشپذیری که متد __reversed__() را نیز ارائه میدهند.
اضافه شده در نسخهی 3.6.
کلاس پایه انتزاعی (ABC) برای کلاسهای تولیدگر که پروتکل تعریفشده در PEP 342 را پیادهسازی میکنند؛ پروتکلی که پیمایشگرها را با متدهای send()، throw() و close() گسترش میدهد.
برای جزئیات درباره استفاده از Generator در حاشیهنویسیهای نوع، حاشیهنویسی تولیدگرها و همروالها را ببینید.
اضافه شده در نسخهی 3.5.
کلاسهای پایه انتزاعی (ABC) برای دنبالههای فقطخواندنی و تغییرپذیر.
یادداشت پیادهسازی: برخی از متدهای میکساین، مانند __iter__()، __reversed__() و index()، فراخوانیهای مکرری به متد زیربنایی __getitem__() انجام میدهند. در نتیجه، اگر __getitem__() با سرعت دسترسی ثابت پیادهسازی شده باشد، متدهای میکساین عملکرد خطی خواهند داشت؛ اما اگر متد زیربنایی خطی باشد (همانطور که در یک فهرست پیوندی اینگونه خواهد بود)، میکساینها عملکرد درجه دو خواهند داشت و احتمالاً لازم است بازنویسی شوند.
نخستین اندیس value را برمیگرداند.
اگر مقدار موجود نباشد، ValueError پرتاب میشود.
پشتیبانی از آرگومانهای start و stop اختیاری است، اما توصیه میشود.
تغییر یافته در نسخهی 3.5: پشتیبانی از آرگومانهای stop و start به متد index() اضافه شد.
منسوخ شده از نسخهی 3.12, در نسخهی 3.17 حذف خواهد شد: کلاس پایه انتزاعی (ABC) ByteString منسوخ شده است.
برای بررسی اینکه obj پروتکل بافر را در زمان رانتایم پیادهسازی میکند، از isinstance(obj, collections.abc.Buffer) استفاده کنید. برای استفاده در حاشیهنویسیهای نوع، یا از Buffer استفاده کنید یا از یک اجتماع (union) که بهصراحت انواع مورد پشتیبانی کد شما را مشخص میکند (مثلاً bytes | bytearray | memoryview).
ByteString در ابتدا قرار بود یک کلاس انتزاعی باشد که بهعنوان نوع والد هر دو کلاس bytes و bytearray عمل کند. با این حال، از آنجا که این کلاس پایه انتزاعی هرگز هیچ متدی نداشت، دانستن اینکه یک شیء نمونهای از ByteString است، در عمل هرگز اطلاعات مفیدی دربارهی آن شیء به شما نمیداد. سایر انواع رایج بافر مانند memoryview نیز هرگز بهعنوان زیرنوعهایی از ByteString در نظر گرفته نمیشدند (نه در رانتایم و نه توسط بررسیکنندههای نوع ایستا).
برای جزئیات بیشتر PEP 688 را ببینید.
کلاسهای پایه انتزاعی برای مجموعههای فقطخواندنی و تغییرپذیر.
کلاسهای پایه انتزاعی برای نگاشتهای فقطخواندنی و تغییرپذیر.
کلاسهای پایه انتزاعی (ABCs) برای نماهای نگاشت، آیتمها، کلیدها و مقدارها.
کلاس پایه انتزاعی (ABC) برای اشیاء awaitable، که میتوان از آنها در عبارتهای await استفاده کرد. پیادهسازیهای سفارشی باید متد __await__() را فراهم کنند.
اشیاء همروال و نمونههای کلاس پایه انتزاعی (ABC) Coroutine، همگی نمونههایی از این ABC هستند.
نکته
در CPython، همروالهای مبتنی بر تولیدگر (تولیدگرها که با @types.coroutine دکور شدهاند) awaitable هستند، اگرچه متد __await__() ندارند. استفاده از isinstance(gencoro, Awaitable) برای آنها False را برمیگرداند. برای شناسایی آنها از inspect.isawaitable() استفاده کنید.
اضافه شده در نسخهی 3.5.
ABC برای کلاسهای سازگار با همروال. این کلاسها متدهای زیر را، که در اشیاء همروال تعریف شدهاند، پیادهسازی میکنند: send()، throw() و close(). پیادهسازیهای سفارشی باید __await__() را نیز پیادهسازی کنند. تمام نمونههای Coroutine نیز نمونههایی از Awaitable هستند.
نکته
در CPython، همروالهای مبتنی بر تولیدگر (تولیدگرها که با @types.coroutine آراییده شدهاند) awaitable هستند، اگرچه آنها متد __await__() ندارند. استفاده از isinstance(gencoro, Coroutine) برای آنها False را برمیگرداند. برای تشخیص آنها از inspect.isawaitable() استفاده کنید.
برای جزئیات دربارهی استفاده از Coroutine در حاشیهنویسیهای نوع، حاشیهنویسی تولیدگرها و همروالها را ببینید. واریانس و ترتیب پارامترهای نوع، متناظر با موارد مربوط به Generator است.
اضافه شده در نسخهی 3.5.
ABC برای کلاسهایی که متد __aiter__ را ارائه میدهند. همچنین تعریف پیمایشپذیر ناهمگام را ببینید.
اضافه شده در نسخهی 3.5.
کلاس پایه انتزاعی (ABC) برای کلاسهایی که متدهای __aiter__ و __anext__ را فراهم میکنند. همچنین تعریف asynchronous iterator را ببینید.
اضافه شده در نسخهی 3.5.
ABC برای کلاسهای asynchronous generator که پروتکل تعریفشده در PEP 525 و PEP 492 را پیادهسازی میکنند.
برای جزئیات دربارهی استفاده از AsyncGenerator در حاشیهنویسیهای نوع، حاشیهنویسی تولیدگرها و همروالها را ببینید.
اضافه شده در نسخهی 3.6.
کلاس پایه انتزاعی (ABC) برای کلاسهایی که متد __buffer__() را ارائه میدهند و پروتکل بافر را پیادهسازی میکنند. PEP 688 را ببینید.
اضافه شده در نسخهی 3.12.
کلاسهای پایه انتزاعی (ABCs) به ما امکان میدهند از کلاسها یا نمونهها بپرسیم که آیا قابلیت خاصی را فراهم میکنند یا خیر، برای مثال:
size = None if isinstance(myvar, collections.abc.Sized): size = len(myvar)
برخی از کلاسهای پایه انتزاعی (ABC) نیز بهعنوان میکساین مفید هستند و توسعه کلاسهایی را که از APIهای ظرف پشتیبانی میکنند، آسانتر میکنند. برای مثال، برای نوشتن کلاسی که از API کامل Set پشتیبانی میکند، تنها لازم است سه متد انتزاعی زیربنایی را فراهم کنید: __contains__()، __iter__() و __len__(). ABC متدهای باقیمانده مانند __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 بهعنوان میکساین :
از آنجا که برخی از عملیات مجموعهای، مجموعههای جدیدی ایجاد میکنند، متدهای پیشفرض میکساین به راهی برای ایجاد نمونههای جدید از یک پیمایشپذیر نیاز دارند. فرض میشود که سازندهی کلاس، امضایی به شکل ClassName(iterable) داشته باشد. این فرض در قالب یک classmethod داخلی به نام _from_iterable() استخراج شده است که cls(iterable) را فراخوانی میکند تا یک مجموعه جدید تولید کند. اگر از میکساین Set در کلاسی با امضای سازنده متفاوت استفاده شود، لازم است _from_iterable() را با یک classmethod یا متد معمولی که بتواند نمونههای جدید را از یک آرگومان پیمایشپذیر بسازد، بازنویسی کنید.
برای بازنویسی مقایسهها (احتمالاً برای سرعت، زیرا معنای آنها ثابت است)، __le__() و __ge__() را بازتعریف کنید؛ سپس سایر عملیات بهطور خودکار از آنها پیروی خواهند کرد.
میکساین Set یک متد _hash() برای محاسبهی مقدار هش مجموعه ارائه میکند؛ با این حال، __hash__() تعریف نشده است، زیرا همهی مجموعهها هشپذیر یا تغییرناپذیر نیستند. برای افزودن هشپذیری مجموعه با استفاده از میکساینها، از هر دو Set و Hashable ارثبری کنید، سپس __hash__ = Set._hash را تعریف کنید.
همچنین ببینید
دستور پخت OrderedSet برای نمونهای که بر پایهی MutableSet ساخته شده است.
برای اطلاعات بیشتر درباره ABCها، ماژول abc و PEP 3119 را ببینید.