Python 官方文档:入门教程 => 点击学习
今天,我们要讲的是python的ABC 模块 这个模块是用来定义一个抽象类。具体的概要介绍可以浏览PEP 3119。 register 首先注册一个abc的虚拟子类 from abc import ABCMeta class MyAB
今天,我们要讲的是python的ABC 模块
这个模块是用来定义一个抽象类。具体的概要介绍可以浏览PEP 3119。
register
首先注册一个abc的虚拟子类
- from abc import ABCMeta
-
- class MyABC:
- __metaclass__ = ABCMeta
-
- MyABC.reGISter(tuple)
-
- assert issubclass(tuple, MyABC)
- assert isinstance((), MyABC)
在虚拟基类中,你也可以忽略这个方法。
__subclasshook__ (subclass)
(这个方法必须定义)
检查子类是否被确认为ABC的子类。你也可以自己定制一个issubclass方法,这样就不需要再调用register()了。这个方法可以返回Ture,False或NotImplemented。如果返回的是TRUE,这个子类就被认为是ABC的子类了。如果返回FALSE,这个子类就不被认为是ABC的子类。如果是NotImplemented 请检查 子类的继承关系和语法。
下面是一个实用的例子:
- class Foo(object):
- def __getitem__(self, index):
- ...
- def __len__(self):
- ...
- def get_iterator(self):
- return iter(self)
-
- class MyIterable:
- __metaclass__ = ABCMeta
-
- @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)
--结束END--
本文标题: Python -- abc module
本文链接: https://www.lsjlt.com/news/190709.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0