Python module ---- abc
python中并没有提供抽象类与抽象方法,但是提供了内置模块abc(abstract base class)来模拟实现抽象类。
抽象基本类的几大特点:
1. 要定义但是并不完整的实现所有方法
2. 基本的意思是作为父类
3. 父类需要明确表示出那些方法的特征,这样在写子类时更加简单明白
用抽象基本类的地方:
1. 用作父类
2. 用作检验实例类型
3. 用作抛出异常说明
abc模块中的类和函数
1. abc.ABCMeta: 用来生成抽象基础类的元类。由它生成的类可以被直接继承。
from abc import ABCMeta class MyABC: #1. 首先生成了一个MyABC的抽象基础类
__metaclass__ = ABCMeta # 使用了__metaclass__这个魔法方法就意味着就会用__metaclass__指定的元类来创建类了。 MyABC.register(tuple) #2. 然后再将tuple变成它的虚拟子类 assert issubclass(tuple, MyABC)
assert isinstance((), MyABC) #3. 再通过issubclass或isinstance都可以判断出tuple是不是出于MyABC类。
也可以通过复写__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)
2. abc.abstractmethod(function): 表明抽象方法的生成器
class C:
__metaclass__ = ABCMeta
@abstractmethod
def my_abstract_method(self, ...):
...
3. abc.abstractproperty([fget[,fset[,fdel[,doc]]]]): 表明一个抽象属性
class C:
__metaclass__ = ABCMeta
@abstractproperty
def my_abstract_property(self):
...
上例只是只读属性,如果是读写属性,可以如下:
class C:
__metaclass__ = ABCMeta
def getx(self): ...
def setx(self, value): ...
x = abstractproperty(getx, setx)
定义抽象类
import abc class PluginBase(object): #定义一个抽象基类PluginBase,这个基类用于保存和加载数据。
__metaclass__ = abc.ABCMeta @abc.abstractmethod
def load(self, input):
"""Retrieve data from the input source and return an object."""
return @abc.abstractmethod
def save(self, output, data):
"""Save the data object to the output."""
return
【参考文档】
学习Python的ABC模块:https://blog.csdn.net/igorzhang/article/details/39026885
python abc模块 :https://www.cnblogs.com/wancy86/p/6269553.html?utm_source=itdadao&utm_medium=referral
python抽象基类abc:https://www.jianshu.com/p/19ed49293168
python面对对象编程---------6:抽象基类:https://www.cnblogs.com/pengsixiong/p/5382768.html
Python高级主题:Python ABC(抽象基类):https://blog.csdn.net/qijiqiguai/article/details/77269839
Python之Metaclass详解,Python之元类:https://www.cnblogs.com/intimacy/p/8119449.html
Python “黑魔法” 之 Meta Classes:http://python.jobbole.com/85126/
Python module ---- abc的更多相关文章
- install python module
[install python module] 参考:http://docs.python.org/2.7/install/index.html
- Nuke Python module的使用
最近很多脚本工作都需要脱离nuke的gui环境运行,没有了script editor就必须要尝试Nuke Python module功能了.该模式可以执行大部分在GUI环境中的命令,在自动生成或者批量 ...
- __import__ 与动态加载 python module
原文出处: koala bear Direct use of __import__() is rare, except in cases where you want to import a m ...
- Python module中的全局变量
Python module中的全局变量 我想要实现一个python module,这个module中有一些配置项,这些配置项可以被读取,被修改.一个可行的方案是把这些配置项写到一个叫settings. ...
- python 使用abc实现接口类/虚类(2.2)
python 使用abc实现接口类/虚类 具体类 class BaseA: def run(self): print('base A running') class ChildA(BaseA): de ...
- Python module all in one
Python module all in one Python Modules https://docs.python.org/3/tutorial/modules.html Fibonacc # F ...
- 学习Python的ABC模块(转)
http://yansu.org/2013/06/09/learn-Python-abc-module.html 1.abc模块作用 Python本身不提供抽象类和接口机制,要想实现抽象类,可以借助a ...
- Python.Module.site
site " This module is automatically imported during initialization. The automatic import can be ...
- import 本地Python module或package
很基础很重要的一课,虽然很简单,但是防止以后忘了,还是记下来 这个笔记里说的都是import本地的,自己创建的,或者复制粘贴的别人的,总之“不是安装到library”的module or packag ...
随机推荐
- 转载:sql练习(针对Mysql)
感谢 https://www.cnblogs.com/DreamDrive/p/6193530.html 创建表: DROP TABLE DEPT; --部门表 CREATE TABLE DE ...
- eclipse与visualVM与mat
GC与CPU与内存的查看与分析 本文主要讲visualVM,MAT的下载配置;以及如何运用visualVM生成hprof文件;如何用visualVM分析CPU消耗,程序瓶颈在哪里;怎么用MAT导入hp ...
- 转载一篇阿里云Terraform 开发指南
连接:https://www.jianshu.com/p/0aebea117cae 是一个比较详细的开发指南
- QCAD 怎么把多余的线剪掉
QCAD 怎么把多余的线剪掉 如下所示如果我在 AutoCAD 中我是使用 Trim 的功能,但是在 QCAD 似乎不可行. 然后现在以上而有个 Divide,感觉有用,相当于线打断,然后再删除,这个 ...
- HTTP 客户端接收数据超时
本文使用两种方式测试HTTP 客户端读数据超时的情况,一种是直接使用golang自带的http库,另一种是使用martini web框架. 1. 测试1--直接使用http库 1.1.启动server ...
- jquery怎么选择嵌套的第一层的li
$(".ra").click(function(){ var id=$(this).children("ul").attr("id"); i ...
- python第三方库之PyGraphics
有一段代码要import media,打开python自带的IDLE,输入: >>>import media 就会提示没有media这个模块! 原来media模块不是系统的标准模块, ...
- tomcat中间件提交表单数据量过大警告处理方案
http://www.bubuko.com/infodetail-976418.html http://www.cnblogs.com/yg_zhang/p/4248061.html tomcat中间 ...
- windows 8.1 启用hyper-v导致vmware 无法使用的问题解决方案(兼顾WP8.1模拟器和vmware)
最近搭建了windows phone 8.1开发环境,为了开机就可以进行WP8.1开发,就使用了 bcdedit /set {BCD ID} hypervisorlaunchtype auto 命令将 ...
- Group(), Groups(),& Groupdict() 用法
group() 返回一个或多个匹配的字串.如果只有一个参数,结果只有单个字符串:如果有多个参数,结果是一个元组,元组里每一项对应一个参数.没有参数,group1默认是0(整个匹配串被返回).如果gro ...