ABC模块的使用
来源:互联网 发布:网络诽谤罪 编辑:程序博客网 时间:2024/06/10 20:10
- ABC模块的使用
- abcABCMeta
- abstractmethod和abstractproperty
ABC模块的使用
ABC(Abstract Base Class)模块提供了在Python中定义抽象类的方法。
在Python中没有强的类型检查;因此在执行操作的时候,并不需要所操作的对象是严格继承自某一个基类的。只要由相关的属性,就可以访问。但是由的时候,我们会有需求:一些类定义共同的接口,否则抛出异常;虽然也可以通过hasattr()来实现,但是终归是很麻烦。而ABC模块就可以帮我们实现这个功能。所以,Python中的抽象类和C++中的概念和C++中的还是有一些不一样。
abc.ABCMeta
用来定义抽象类的元类。使用该元类来定义一个抽象类。
定义一个抽象基类的方法是将一个类的元类设置为abc.ABCMeta
。
抽象基类的继承有两种方式:
1. 继承。
2. 注册。
代码实现如下:
# coding: utf-8from abc import ABCMeta, abstractmethodclass MyABC: __metaclass__ = ABCMeta @abstractmethod def amtest(self): """abstractf method"""class InheritImpl(MyABC): def amtest(self): print 'InheritImpl'class RegisterImpl: def amtest(self): print 'RegisterImpl'MyABC.register(RegisterImpl)if __name__ == '__main__': ii = InheritImpl() ii.amtest() ri = RegisterImpl() ri.amtest() print issubclass(InheritImpl, MyABC) print issubclass(RegisterImpl, MyABC)
代码输出:
InheritImplRegisterImplTrueTrue
可见InheritImpl和RegisterImpl都使MyABC的子类,继承并实现了虚函数。
使用直接继承的方式,如果子类中没有完全实现相应的虚接口,那么在执行的时候就会报错,但是如果使注册的方式,就没有该限制。
@abstractmethod和@abstractproperty
在上例中,用@abstractmethod声明一个基类中的函数使虚函数。除了该装饰器外,还有@abstractproperty声明一个抽象属性。
阅读全文
0 0
- ABC模块的使用
- Python的ABC模块
- Python的ABC模块
- 学习Python的ABC模块
- 学习Python的ABC模块
- Python abc模块的几个小知识点
- C#积木模块ABC:16.使用系统剪贴板?
- python abc模块
- opencv中 overwrite 的使用情况ABC
- list('abc') list([''abc']) set('abc') set(['abc'])的区别
- 智能ABC漏洞使用
- Delphi使用ABC
- ggplot2使用abc
- plyr包使用abc
- Java中 "abc" + '/'和"abc" + "/"的区别
- new String("abc")和“abc”的区别
- new String("abc")和“abc”的区别
- C# 积木模块 ABC(三)
- 情商2-给拒绝找个合适的理由
- CC254x--BLE
- 05.11 inotify+rsync构建实时同步
- 【题解】poj3281 dining
- Linux下安装Octave
- ABC模块的使用
- OOP思想中的抽象类和抽象方法
- 整理一些实用的函数
- 【DRM】PlayReady数字版权保护系统
- 计算机中的字,字长,位,字节的概念
- 【codevs 1077】多源最短路
- 数据库可疑的解决方案
- 百度地图离线瓦片下载(备忘)
- 76. Minimum Window Substring [LeetCode]