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 ...
随机推荐
- 对css语法中position值的理解
1.static 正常定位,就是默认定位,根据他的top,right,bottom,left的值 2.relative 根据他top,right,bottom,left的值偏移 3.absolute ...
- ruoyi管理系统建立子项目,卡住
这个一定不要勾选,不然依赖加了还是引用不到.
- Vue2.5
1.1 创建第一个Vue实例
- 创建一个dynamics 365 CRM online plugin (十) - Isolation mode or trust mode
Isolation Mode 也被称作为Plugin Trust CRM里面有两种plugin trust / isolation mode 1. Full Trust 只在OP系统中可使用,没有限制 ...
- springmvc的dispatchservlet初始化
初始化做的事情,处理下controller的映射关系 https://blog.csdn.net/qq_38410730/article/details/79426673
- spring事务详解(三)源码详解
系列目录 spring事务详解(一)初探事务 spring事务详解(二)简单样例 spring事务详解(三)源码详解 spring事务详解(四)测试验证 spring事务详解(五)总结提高 一.引子 ...
- cpt212b--- 触摸芯片配置
软件的应用: 1.可以依照你所需要的芯片类型建立适当的工程,下面是在没有j-link的情况时的一种操作方式 建立完工程后,cpt212b的配置参数页面如上,更改参数点击Save 按钮,软件自动生成 . ...
- 剑指offer 9.递归和循环 变态跳台阶
题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 这道题还是编程题? 数学渣渣看到心拔凉拔凉的, 要用到数学归纳法来 ...
- innobackupex: error while loading shared libraries: libssl.so.6
我遇到过这个问题,但由于测试环境不允许上网,所以虽然搜到了一篇解决办法,但我也未亲自测试,先记录下来别人的解决办法. 参考文章:http://blog.itpub.net/29654823/views ...
- swoole之代码热更新实现 转自https://blog.csdn.net/nep_tune/article/details/81329918
随着swoole的版本迭代更新,已经足够稳定了,在阿里,腾讯,yy等各大公司都有着使用,也有很多游戏圈里的朋友也在使用,这些朋友经常会提到一个问题,每次代码更新还需要停止服务,然后重新启动,来达到更新 ...