Python数据模型(延伸阅读)

杂  谈

数据模型还是对象模型

Python 文档里总是用"Python 数据模型"这种说法,而大多数作者提到这个概念的时

候会说"Python 对象模型"。Alex Martelli 的《Python 技术手册(第2 版)》和David

Beazley 的《Python 参考手册(第4 版)》是这个领域中最好的两本书,但是他们也

总说"Python 对象模型"。维基百科中对象模型的第一个定义(http://en.wikipedia.org/

wiki/Object_model)是:计算机编程语言中对象的属性。这正好是"Python 数据模型"

所要描述的概念。我在本书中一直都会用"数据模型"这个词,首先是因为在Python

文档里对这个词有偏爱,另外一个原因是Python 语言参考手册中与这里讨论的内容

最相关的一章的标题就是"数据模型"(https://docs.python.org/3/reference/datamodel.

html)。

魔术方法

在Ruby 中也有类似"特殊方法"的概念,但是Ruby 社区称之为"魔术方法 ",而实

际上Python 社区里也有不少人用的是后者。而我恰恰认为"特殊方法"是"魔术方

法"的对立面。Python 和Ruby 都利用了这个概念来提供丰富的元对象协议,这不是

魔术,而是让语言的用户和核心开发者拥有并使用同样的工具。

考虑一下JavaScript,情况就正好反过来了。JavaScript 中的对象有不透明的魔术般的

特性,而你无法在自定义的对象中模拟这些行为。比如在JavaScript 1.8.5 中,用户的自定义对象不能有只读属性,然而不少JavaScript 的内置对象却可以有。因此在

JavaScript 中,只读属性是"魔术"般的存在,对于普通的JavaScript 用户而言,它

就像超能力一样。2009 年推出的ECMAScript 5.1 才让用户可以定义只读属性。

JavaScript 中跟元对象协议有关的部分一直在进化,但由于历史原因,这方面它还是赶

不上Python 和Ruby。

元对象

The Art of the Metaobject Protocal (AMOP)是我最喜欢的计算机图书的标题。客观来

说,元对象协议 这个词对我们学习Python 数据模型是有帮助的。元对象 所指的是那些

对建构语言本身来讲很重要的对象,以此为前提,协议 也可以看作接口 。也就是说,
元对象协议是对象模型的同义词,它们的意思都是构建核心语言的API。

一套丰富的元对象协议能让我们对语言进行扩展,让它支持新的编程范式。AMOP 的

第一作者Gregor Kiczales 后来成为面向方面编程的先驱,他写出了一个Java 扩展叫

AspectJ,用来实现他对面向方面编程的理念。其实在Python 这样的动态语言里,更容

易实现面向方面编程。现在已经有几个Python 框架在做这件事情了,其中最重要的是

zope.interface(http://docs.zope.org/zope.interface/)。

相关推荐
椒颜皮皮虾྅1 小时前
让文档不止于文字:DeploySharp + PP-Structure,打通版面分析与表格重建
开发语言·学习·c#·.net·cuda
Frag0ut1 小时前
Notepad++ 零基础入门:从记事本到代码编辑器的平滑过渡(2026最新版)
python·编辑器·html·json·notepad++·markdown·记事本
深蓝AI1 小时前
Webhook 重投别再执行两次:Python + SQLite 收件箱实测
python
Eider19981 小时前
Python基础知识之并发相关-2
开发语言·前端·python
第九序言T1 小时前
Python 数据处理进阶(二十二)用 Pandas 做一次完整的用户行为分析
开发语言·python·数据分析·pandas
云和数据.ChenGuang1 小时前
再论深拷贝和浅拷贝
开发语言·人工智能·python·1024程序员节
第九序言T1 小时前
Python 数据处理进阶(二十一)相关性与分组对比:数据里藏着什么关系
大数据·人工智能·python·数据分析·pandas
Gent_倪1 小时前
Python 语句梳理
python
晚风予卿云月2 小时前
【C++高并发内存池】 2.ThreadCache设计
开发语言·c++·高并发内存池·tcmalloc
m0_738120722 小时前
JWT 安全从入门到实战:六种典型攻击场景解析
前端·网络·python·安全·网络安全