WEB开发网
开发学院软件开发Python 在 Python 中对协议使用 PEAK 阅读

在 Python 中对协议使用 PEAK

 2007-03-30 12:25:16 来源:WEB开发网   
核心提示: PyProtocols 具有一个称为“适配(adaptation)”的功能,类似于“部分类型(partial typing)”这一非正统计算机科学概念,在 Python 中对协议使用 PEAK(3),适配还可能被认为是“加速的强制

PyProtocols 具有一个称为“适配(adaptation)”的功能,类似于“部分类型(partial typing)”这一非正统计算机科学概念。适配还可能被认为是“加速的强制同型”。如果一个接口定义了所需要的一组能力 (也就是对象方法),那么要去做“所需要的一切”的对象就要求适配 -- 通过 protocols.adapt() 函数实现 -- 以提供所需要的能力。显然,如果您有一个显式的转换函数可以将类型 X 的对象转换为类型 Y 的对象(在这里 Y 实现了某个 IY 接口),那么那个函数要能够让 X 适配协议 IY 。不过,PyProtocols 中的适配可以做比这多得多的事情。例如,甚至如果您从来没有显式地编写过从类型 X 到类型 Y 的转换程序, adapt() 通常可以推演出一条让 X 提供 IY 所要求的能力的途径(也就是说,找到从 X 到接口 IZ ,从 IZ 到 IW ,然后再从 IW 到 IY 的中间转换)。

声明接口和适配器

在 PyProtocols 中有很多不同的方法可以创建接口和适配器。PyProtocols 文档非常详细地介绍了这些技术 -- 很多不会在本文中涉及。接下来我们将进入一些细节,不过,我觉得,在这里给出实际的 PyProtocols 代码的一个最简化实例是个有用的方法。

例如,我决定创建一个 Python 对象的类-Lisp 序列化。其描述并不是准确的 Lisp 语法,我也并不在意这种格式确切的优点和缺点。在这里,我的想法只是创建一个功能,使之可以执行类似 repr() 函数或 pprint 模块的工作,不过结果是既与以前串行器(serializers)有明显的不同,又要能更容易地扩展/定制。出于举例说明的目的做出了一个非常不像 Lisp 的选择:映射(mappings)是一个比列表(list)更为基础的数据结构(Python 的元组(tuple)或列表被作为以连续整数为键的映射来处理)。下面是代码:

上一页  1 2 3 4 5 6 7  下一页

Tags:Python 协议 使用

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接