用法:
class abc.ABCMeta
用於定義抽象基類 (ABC) 的元類。
使用這個元類來創建一個 ABC。 ABC 可以直接子類化,然後充當mix-in 類。您還可以將不相關的具體類(甚至內置類)和不相關的 ABC 注冊為 “virtual subclasses” - 這些及其後代將被內置
issubclass()
函數視為注冊 ABC 的子類,但注冊 ABC 不會t 出現在他們的 MRO(方法解析順序)中,注冊 ABC 定義的方法實現也不會被調用(甚至不能通過super()
調用)。 1使用
ABCMeta
元類創建的類具有以下方法:您還可以在抽象基類中重寫此方法:
有關這些概念的演示,請查看此示例 ABC 定義:
class Foo: def __getitem__(self, index): ... def __len__(self): ... def get_iterator(self): return iter(self) class MyIterable(ABC): @abstractmethod def __iter__(self): while False: yield None def get_iterator(self): return self.__iter__() @classmethod def __subclasshook__(cls, C): if cls is MyIterable: if any("__iter__" in B.__dict__ for B in C.__mro__): return True return NotImplemented MyIterable.register(Foo)
ABC
MyIterable
將標準可迭代方法__iter__()
定義為抽象方法。這裏給出的實現仍然可以從子類中調用。get_iterator()
方法也是MyIterable
抽象基類的一部分,但它不必在非抽象派生類中被覆蓋。此處定義的
__subclasshook__()
類方法表示,在其__dict__
(或其基類之一,通過__mro__
列表訪問)中具有__iter__()
方法的任何類也被視為MyIterable
.最後,最後一行使
Foo
成為MyIterable
的虛擬子類,即使它沒有定義__iter__()
方法(它使用 old-style 可迭代協議,根據__len__()
和__getitem__()
定義) .請注意,這不會使get_iterator
作為Foo
的方法可用,因此它是單獨提供的。
相關用法
- Python abc.ABCMeta.register用法及代碼示例
- Python abc.ABC用法及代碼示例
- Python abc.abstractmethod用法及代碼示例
- Python abc.abstractproperty用法及代碼示例
- Python abc.abstractstaticmethod用法及代碼示例
- Python abc.abstractclassmethod用法及代碼示例
- Python abs()用法及代碼示例
- Python ast.MatchClass用法及代碼示例
- Python ast.ListComp用法及代碼示例
- Python ast.Lambda用法及代碼示例
- Python asyncio.BaseTransport.get_extra_info用法及代碼示例
- Python ast.IfExp用法及代碼示例
- Python unittest assertNotIsInstance()用法及代碼示例
- Python ast.Return用法及代碼示例
- Python Tkinter askopenfile()用法及代碼示例
- Python ast.Subscript用法及代碼示例
- Python asyncio.shield用法及代碼示例
- Python asyncio.run用法及代碼示例
- Python argparse.ArgumentParser.convert_arg_line_to_args用法及代碼示例
- Python unittest assertIsNotNone()用法及代碼示例
注:本文由純淨天空篩選整理自python.org大神的英文原創作品 abc.ABCMeta。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。