1.ABC模块作用

Python本身不提供抽象类和接口机制,想要实现抽象类,可以借助abc模块。ABC是Abstract Base Class的缩写,是用来定义抽象类的,具体的介绍请参考PEP 3119

2.模块中的类和函数介绍

abc.ABCMeta,用来生成抽象基础类的元类。由它生成的类可以被直接继承。

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

    from abc import ABCMeta class MyABC: __metaclass__ = ABCMeta MyABC.register(tuple) assert issubclass(tuple, MyABC) assert isinstance((), MyABC) 

上面这个例子中,首先生成了一个MyABC的抽象基础类,然后再将tuple变成它的虚拟子类。然后通过issubclass或者isinstance都可以判断出tuple是不是出于MyABC类。

检查子类是否被确认为ABC的子类。你也可以自己定制一个issubclass方法,这样就不需要再调用register()了。这个方法可以返回Ture,False或NotImplemented。如果返回的是TRUE,这个子类就被认为是ABC的子类了。如果返回FALSE,这个子类就不被认为是ABC的子类。如果是NotImplemented 请检查 子类的继承关系和语法。也可以通过复写__subclasshook__(subclass)来实现相同功能,它必须是classmethod。

下面是一个实用的例子:

    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) 

abc.abstractmethod(function),表明抽象方法的生成器

class classname:__metaclass__ = ABCMeta@abstractmethoddef __my_abstract_method__(self):...

abc.abstractproperty([fget[,fset[,fdel[,doc]]]]),表明一个抽象属性

class classname:__metaclass__ = ABCMeta@abstractpropertydef my_abstract_property(self):...

上例只是只读属性,如果是读写属性,可以如下:

转载于:https://my.oschina.net/u/2272631/blog/896606

Python -- abc module相关推荐

  1. ubuntu下,py2,py3共存,/usr/bin/python: No module named virtualenvwrapper错误解决方法

    2019独角兽企业重金招聘Python工程师标准>>> ubuntu下,py2,py3共存 运行virtualenvwrapper会报错如下: /usr/bin/python: No ...

  2. python 模块(Module)和包

    阿里云大学人工智能学前小测验-Python测验 19.以下关于模块说法正确的是 A. 一个.py就是一个模块 B. 任何一个普通的xx.py文件可以作为模块导入 C. 模块文件的扩展名一定是 .py ...

  3. PyMOTW-3 (Python 3 Module of the Week) 翻译团队召集

    自翻译起始已经一个月过去了,目前翻译进度三分之一,PyMOTW 篇幅很大,翻译 PyMOTW 是一个偏大的工程,大概 140 篇文章,并且每篇文章里内容详实,例如这篇正则表达式的文章: https:/ ...

  4. VScode Python no module的解决方法

    VScode Python no module的解决方法 参考文章: (1)VScode Python no module的解决方法 (2)https://www.cnblogs.com/andy-0 ...

  5. python no module named pip_解决python No module named pip的问题

    解决python "No module named pip"的问题 python 升级后导致不能使用原来的pip命令 windows平台 cmd中敲命令:python -m ens ...

  6. python shutil module

    关注微信公众号(瓠悠笑软件部落),一起学习,一起摸鱼 python shutil module shutil module 是 shell utilities 的简写,在Python 程序里面能够让你 ...

  7. /usr/bin/python: No module named pip

    在安装 pip 工具时报错如下: /usr/bin/python: No module named pip 查找资料说先安装 ensurepip 模块,就可以恢复 pip: python -m ens ...

  8. Python模块(Module)详解

    文章目录 一.模块概念 二.模块导入与使用 2.0 准备工作 2.1 import 2.1.1 导入 2.1.2 使用 2.2 from...import 2.2.1 导入 2.2.2 使用 2.3 ...

  9. python no module name_python导包显示No module named XXX问题

    最近用sublime text写python脚本,在导包是一直显示No module named XXX. 问题描述: 首先文件夹的目录结构如下: count.py文件,代码如下: 1 #coding ...

最新文章

  1. 查看centos中mysql的日志的命令_CentOS系统中常用查看日志命令
  2. 第一篇读书笔记,关于UML和模式应用(1)--书籍简介
  3. http协议的状态码
  4. python 百度地图api热力图_【热力图】区域地图热力图,百度地图api
  5. HDU 4502 吉哥系列故事——临时工计划(动态规划)
  6. 企业中两个重要而又容易被忽视的角色,互联网营销
  7. Android加速度传感器实现“摇一摇”,带手机振动
  8. 2015年要学习和巩固的知识点
  9. Phpmyadmin安装过程
  10. Hibernate or 的用法
  11. C#LeetCode刷题之#69-x 的平方根(Sqrt(x))
  12. 弱鸡儿长乐爆肝旅Day8
  13. pthread_key_t和pthread_key_create()详解
  14. PADS2007添加过孔
  15. 致远项目管理SPM系统五大技术平台层-CMP能力概述
  16. excel导出设置自动列宽
  17. Python字符串和列表常用的方法和操作
  18. 【PS专题】PS钢笔压力有感叹号怎么消除
  19. SQL 的各种 join 用法
  20. 查询递归表SQL,分类表查询,递归表数据结构转平级查询优化SQL

热门文章

  1. 详解NLP和时序预测的相似性【附赠AAAI21最佳论文INFORMER的详细解析】
  2. 银行大数据新玩法,构建“一湖两库”金融数据湖
  3. 带着canvas去流浪系列之五 绘制K线图
  4. 大型情感剧集Selenium:9_selenium配合Pillow完成浏览器局部截图
  5. 基于netty4.x开发时间服务器
  6. 一统江湖的大前端(7)React.js-从开发者到工程师
  7. 【Python3网络爬虫开发实战】1.7.2-mitmproxy的安装
  8. SpringCloud与zuul
  9. Android笔记 隐式意图demo
  10. conda报错Collecting package metadata