用法:
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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。