24. Python 元类的起源

原文by Guido van Rossum 2013-10-24 翻译by kant

有谣言说 Python 中的元类来自 Ruby,其实不是。不过既然大家在猜测一些特性的来源,我想还是有必要说清楚一下。

关于 Python 的元类,我并没有受 Ruby 启发(其它地方也没有 :-)。事实上,Ruby 倒是受过 Python 的启发。Mats 曾和我说,他的灵感 20% 来自 Python,80% 来自 Perl,而 Larry Wall 是他心目中的英雄。

我在 1998年写过关于元类的文章

而 Python 中的新式类其实是元类这个概念的衍生品。

真正启发我实现新式类的是一本书,即 Ira Forman 和 Scott Danforth 所写的《Putting Metaclasses to Work》


在 Python 最初的设计中(1990年,发布于1991年),“类型”就已经是一个对象了。所有对象的类型指针都指向一个特殊对象,而这个对象的数据,其实就是一系列定义对象行为的方法指针,这其实与 C++ 中的 vtable 很像。

类型的“类型”一直是一种特殊对象,可以称为元类型(meta-type),因为它的类型就是它自身。

当时我只对 Smalltalk 有一点了解,直到很久之后,看到 Smalltalk 中元类的用法,还感到非常惊奇(与 Python 或 Ruby 中的元类很不一样)。

不过,Smalltalk 的字节码对 Python 字节码影响很大——记得当时是读了 Adele Goldberg 等人写的一本书,应该是《Smalltalk-80: The Language and its Implementation》。"


发表评论

评论列表,共 0 条评论