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 ...
随机推荐
- 芯灵思Sinlinx A64开发板Linux内核定时器编程
开发平台 芯灵思Sinlinx A64 内存: 1GB 存储: 4GB 开发板详细参数 https://m.tb.cn/h.3wMaSKm 开发板交流群 641395230 Linux 内核定时器是内 ...
- 创建一个dynamics 365 CRM online plugin (八) - 使用Shared Variables 在plugins 之前传递data
CRM 可以实现plugin之前的值传递. 我们可以使用SharedVariables 把值在plugin之间传递 实现plugins之间的传递非常简单,我们只需要用key value pair来配对 ...
- Git 环境配置
Git 自带一个 git config 的工具来帮助设置控制 Git 外观和行为的配置变量. 这些变量存储在三个不同的位置: /etc/gitconfig 文件: 包含系统上每一个用户及他们仓库的通用 ...
- 2、冒泡排序法(C语言)
一.冒泡算法实现分析 1.假设有5个元素分别为8,6,15,9,3对其进行冒泡排序,我们需要关注的有三点如下: (1)元素个数 n: (2)需要比较的趟数 i: (3)每趟比较的次数 j: 2.它们之 ...
- Unity 中实现粒子系统的 LOD
模型的 LOD 比较简单,直接使用 Unity 提供的组件 LODGroup 挂到模型物体上,然后分别指定不同 LOD 级别的 Renderer 即可. LODGroup 并不是用距离来控制 LOD, ...
- python3-基础4
字符编码 字符编码: 就是把人类的字符翻译成计算机能识别的数字 字符编码表: 就是一张字符与数字对应关系表 ascii gbk utf-8 unicode unicode --- ...
- 《重构-改善既有代码的设计》学习笔记---Replace Temp with Query(以查询取代临时变量)
临时变量的问题在于: 它们是暂时的,而且只能在所属函数内使用.由于临时变量只在所属函数内可见,所以,如果很多地方都在用这个临时变量,就会驱使你写出更长的函数.如果把临时变量替换为一个查询,那么其他函数 ...
- P1041 传染病控制(dfs)
P1041 传染病控制 题目背景 近来,一种新的传染病肆虐全球.蓬莱国也发现了零星感染者,为防止该病在蓬莱国大范围流行,该国政府决定不惜一切代价控制传染病的蔓延.不幸的是,由于人们尚未完全认识这种传染 ...
- Python量化分析,计算KDJ
Python: v3.6 Pandas: v0.23.4 使用以下方法计算与国内财经软件显示一致 low_list = df['最低价'].rolling(9, min_periods=9).min( ...
- php正则讲解 及与 js的正则比较
正则:用于检索字符串的规则: js正则: var reg=/规则/ reg是一个对象,在浏览器下: 所以研究他的属性和方法 属性: global是修饰符,代表全局检索 g ignorecase 忽略大 ...