当前位置: 首页 > 后端技术 > Python

Python的元类设计从何而来?

时间:2023-03-25 19:28:30 Python

一位资深的Python核心开发者曾建议我们(点击阅读)应该广泛学习其他编程语言的优秀特性,以提高Python在相关领域的能力。在元编程方面,他的建议是学习Hy和Ruby。不过,他也提到自己不知道该学哪门语言来加深对Python元类设计的理解。这其实意味着Python的元类设计很有独创性,并不是借鉴任何语言的成熟设计!既然不是从其他语言学来的,那么Python的元类思想又是从哪里来的呢?Guido不是“凭空”创造的设计吧?以下译文由GuidovanRossum(Python之父)撰写,原作于2013年10月,旨在回答Python元类的起源问题:原文:https://python-history.blogspot.com/2013/10/origin-of-metaclasses-in-python.html译者:猫下的豌豆花@Python猫免责声明:本翻译仅供交流学习之用,基于CCBY-NC-SA4.0许可协议。为便于阅读,内容略有改动,所有图片均为译者所加。python-ideas上有人推测Python的元类设计起源于Ruby。但事实上并非如此。既然是关于语言特征的起源,我觉得有必要讲清楚事实。关于元类,我不受Ruby启发(而且永远不会)。事实上,Ruby的灵感来自Python。Mats曾经告诉我,他20%的灵感来自Python,80%来自Perl,LarryWall是他的英雄。(译注:LarryWall是Perl语言之父,2014年访华,《程序员》杂志做过采访,推荐阅读。)1998年写过一篇关于Python元类的文章:http://www.python.org/doc/essays/metaclasses(作者注:那篇1998年的文章包含一个功能齐全的Enum实现,它具有许多与PEP-435相同的功能。)新式类只是第二个或第三个迭代器。我实施新型课程的灵感来自IraForman和ScottDanforth的一本书《Putting Metaclasses to Work》。但即使在Python的最初设计(1990年,1991年发布)中,类型本身就是对象。任何对象中的类型指针总是指向一个特殊的对象,其“数据”是一堆实现其他对象行为的C函数指针,类似于C++的虚函数表。一个类型的类型总是一个特殊类型对象(Thetypeofatypewasalwaysaspecialtypeobject),你可以称它为元类型(meta-type),因为它是它自己的类型。当时我对Smalltalk只有模糊的了解;后来读到它的元类设计时,我很惊讶,因为它与Python或Ruby中的元类是如此不同!然而,Smalltalk的字节码严重影响了Python的字节码。我在阿黛尔·戈德堡等人的书上看过,好像是。(译完)以上文章来自Guido的《The History of Python》系列,主要讲述Python语言和社区的发展史。我已经翻译了这个系列的最新一篇《pgen 解析器的起源》,我还打算陆续翻译其他文章……(就一次)……巧的是,刚翻译完这篇文章,我查资料的时候,我意外发现2019年上半年已经有人翻译了这个系列(他翻译了25篇,刚好不包括我翻译的最新一篇)!我从来没有读过这些翻译!译者也有公众号,我好奇的看了一些文章,发现很多只有少数的阅读!看来译者并没有花太多心思在操作上,纯粹是作为一种学习兴趣,默默做事,不求掌声。所以,如果你对Python的历史感兴趣,我真诚地推荐你关注“ReadingPython”,看看它的历史文章。(另外,译者目前正在翻译《Python behind the scenes》系列,这也是我的翻译计划之一,我居然把14000字的文字翻译了一半搁置了好几个月。。。)推荐阅读:1.对话Python之父:更快的Python!2、Python之父爆料:明年Python至少翻倍!3、Python之父重回决策层,未来将如何发展?4.谈谈Python的内置电池5.从Python之父的谈话谈知识产权、知识分享和文章翻译