用法:
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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。
