前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python -- abc module

Python -- abc module

作者头像
py3study
发布2020-01-06 13:30:31
7110
发布2020-01-06 13:30:31
举报
文章被收录于专栏:python3python3

今天,我们要讲的是python的ABC 模块

这个模块是用来定义一个抽象类。具体的概要介绍可以浏览PEP 3119

register

首先注册一个abc的虚拟子类

代码语言:javascript
复制
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 请检查 子类的继承关系和语法。

下面是一个实用的例子:

代码语言:javascript
复制
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) 
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-09-18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档