文档章节

Python -- abc module

Alex142857
 Alex142857
发布于 2017/05/10 11:37
字数 445
阅读 10
收藏 0

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

    @abstractmethod
    def __my_abstract_method__(self):
        ...

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

class classname:
    __metaclass__ = ABCMeta

    @abstractproperty
    def my_abstract_property(self):
        ...

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

 

本文转载自:http://blog.csdn.net/igorzhang/article/details/39026885

Alex142857

Alex142857

粉丝 3
博文 124
码字总数 12259
作品 0
朝阳
程序员
私信 提问
Python 元组、列表、字典、文件

python的元组、列表、字典数据类型是很python(there python is a adjective)的数据结构。这些结构都是经过足够优化后的,所以如果使用好的话,在某些area会有很大的益处。 元组 个人认为就...

icheer
2012/07/13
52
0
1.2.3 Python简介和优势

Python 由 Guido 于1989年年底开发,Python 语言是基于ABC教学语言的。ABC这种语言非常优美和强大,是专门为非专业程序员设计的。但是,ABC语言并没有获得广泛的应用,Guido认为是非开放造成...

Gooiem
2015/08/15
186
0
关于运行“基于极限学习机ELM的人脸识别程序”代码犯下的一些错误

代码来源 基于极限学习机ELM的人脸识别程序 感谢文章主的分享 我的环境是 win10 anaconda Command line client (version 1.6.5)(conda 4.3.30) tensorflow-gpu 1.1.0 python 3.6.2 1. 直接运...

donfaquir
2018/04/30
0
0
Python类的重写和私有变量

Python类的重写和私有变量 1、 类的重写 如果子类没有定义init()方法,子类初始化的时候就会调用父类的方法,但是当子类定义了init()方法,子类就不会调用父类的init()方法, class ren(obje...

peizh
2017/11/07
48
0
运行“基于极限学习机ELM的人脸识别程序”犯下的一些错误

代码来源:基于极限学习机ELM的人脸识别程序 感谢文章主的分享 我的环境是 win10 anaconda Command line client (version 1.6.5)(conda 4.3.30) tensorflow-gpu 1.1.0 python 3.6.2 1. 直接运...

donfaquir
2018/04/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

nginx学习之模块

1、 stub_status模块: 用于展示nginx处理连接时的状态。 配置语法如下: Syntax:stub_status;Default:默认没有配置Context:server、location 可以编辑default.conf,加上如下配置: ...

码农实战
45分钟前
4
0
MySQL,必须掌握的6个知识点

目录 一、索引B+ Tree 原理 MySQL 索引 索引优化 索引的优点 索引的使用条件 二、查询性能优化使用 Explain 进行分析 优化数据访问 重构查询方式 三、存储引擎InnoDB MyISAM 比较 四、数据类...

李红欧巴
49分钟前
4
0
堆”和“栈

C++作为一款C语言的升级版本,具有非常强大的功能。它不但能够支持各种程序设计风格,而且还具有C语言的所有功能。我们在这里为大家介绍的是其中一个比较重要的内容,C++内存区域的基本介绍。...

SibylY
今天
4
0
总结:Https

一、介绍 简单理解,https即在http协议的基础上,增加了SSL协议,保障数据传输的安全性。 它由以前的http—–>tcp,改为http——>SSL—–>tcp;https采用了共享密钥加密+公开密钥加密的方式 ...

浮躁的码农
今天
6
0
数据库表与表之间的一对一、一对多、多对多关系

表1 foreign key 表2 多对一:表 1 的多条记录对应表 2 的一条记录 利用foreign key的原理我们可以制作两张表的多对多,一对一关系 多对多: 表1的多条记录可以对应表2的一条记录 表2的多条记...

Garphy
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部