流程的Python 第十一章:接口:从协议到抽象基类

前言:
抽象基类与描述符和元类一样,是用于构建框架的工具。因此,只有少数Python开发者编写的抽象基类不会对用户施加不必要的限制,让他们做无用功。

目录:

  1. 内容回顾
  2. 相关资料
  3. 阅读后感

正文:
一. 内容回顾
1.1 Python文化中的接口和协议
协议是接口,但不是正式的(只由文档和约定定义),因此协议不能像正式接口那样施加限制。

1.2 Python喜欢序列
Python数据模型的哲学是尽量支持基本协议。

1.3 使用猴子补丁在运行时实现协议

1.4 Alex Martelli的水禽

1.5 定义抽象基类的子类

1.6 标准库中的抽象基类
大多数抽象基类在collections.abc模块中定义。

1.7 定义并使用一个抽象基类

1.8 Tombola子类的测试方法
_ subclass_()
这个方法返回类的直接子类列表,不含虚拟子类。
__adb__registry
只有抽象基类有这个属性,其值是一个WeakSet对象,即抽象类注册的虚拟子类的弱引用。

1.9 Python使用register的方法
Tombola.register当作类装饰器使用,在Python 3.3之前的版本中不能这样使用register,必须在定义类之后像普通函数那样调用。

1.10 鹅的行为有可能像鸭子

二. 相关资料
2.1 抽象基类
抽象类(abstract base class,ABC)就是类里定义了纯虚成员函数的类。纯虚函数[1] 只提供了接口,并没有具体实现。抽象类不能被实例化(不能创建对象),通常是作为基类供子类继承,子类中重写虚函数,实现具体的接口。简言之,ABC描述的是至少使用一个纯虚函数的接口,从ABC派生出的类将根据派生类的具体特征,使用常规虚函数来实现这种接口。【百度百科】

2.2 abc — 抽象基类
Python中并没有提供抽象类与抽象方法,但是提供了内置模块abc(abstract base class)来模拟实现抽象类。
主要类或函数:
1. abc.ABCMeta 这是用来生成抽象基础类的元类。由它生成的类可以被直接继承。
2. abc.ABC辅助类,让你可以不用关心元类概念,直接继承它,就有了ABCMeta元类。使用时注意元类冲突
3. @abc.abstractmethod 定义抽象方法,除了这个装饰器,其余装饰器都被deprecated了。

三. 阅读后感
在写JAVA基于APPIUM UI自动化框架中用到了abstract抽象基类的概念,在Python之前尚未在实际编码过程中使用过,在书中讲到了不建议自己编写抽象基类,除非自己对Python的一五一十都非常了解才去使用。该章节讲得过于理论化,翻阅了两遍都尚未明白,待以后对Python更加理解深入了,再回头看看这个抽象基类。

参考:
1. 流畅python学习笔记:第十一章:抽象基类
2. 抽象基类-百度百科
3. Python模块文档学习之抽象基类abc模块

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值