△点击上方“Python猫”关注 ,回复“1”领取电子书

一个元老级的 Python 核心开发者曾建议我们( 点击阅读),应该广泛学习其它编程语言的优秀特性,从而提升 Python 在相关领域的能力。在关于元编程方面,他的建议是学习 Hy 和 Ruby。但是,他也提到,他并不知道学习哪种语言,可以加深对 Python 元类设计的理解。

这其实意味着,Python 的元类设计有着很大的原创性,并非借鉴自哪种语言的成熟设计!

既然不是从其它语言中学习来的,那么,Python 的元类思想到底起源自哪里呢?Guido 不会是“无中生有”开创出来的设计吧?

下面的一篇译文,作者是 Guido van Rossum(Python 之父),原文写于 2013 年 10 月,正是要回答 Python 元类的起源问题:

原文:https://python-history.blogspot.com/2013/10/origin-of-metaclasses-in-python.html

译者:豌豆花下猫@Python猫

声明:本翻译是出于交流学习的目的,基于 CC BY-NC-SA 4.0 授权协议。为便于阅读,内容略有改动,所有图片皆为译者所加。

python-ideas 上有人猜测 Python 的元类设计是起源自 Ruby。事实并非如此。既然是关于语言特性的起源,我觉得我有必要来澄清下事实。

关于元类,我并没有受过 Ruby 的启发(今后也不会)。事实上,Ruby 受到过 Python 的启发。Mats 曾经告诉我,他的灵感有 20% 来自 Python,有 80% 来自 Perl,而且 Larry Wall 是他心目中的英雄。

(译注:Larry Wall  是 Perl 语言之父。他曾在 2014 年访华,《程序员》杂志做过一期专访,推荐一读

我在 1998 年写过关于 Python 元类的文章:http://www.python.org/doc/essays/metaclasses

Guido 的元类随笔

(作者注:那篇 1998 年的文章里包含了一个功能完整的 Enum 实现,它有许多与 PEP-435 相同的特性。)

新式类只是这个想法的第二或第三次迭代物。

我实现新式类的灵感来自于一本书,即 Ira Forman 和 Scott Danforth 写的《Putting Metaclasses to Work》。

豆瓣有收录

亚马逊这个价格真的吓尿我了!

但即便是在 Python 最初的设计中(1990 年,发布于 1991 年),类型(type)本身就是一个对象。任何对象中的类型指针总是指向一个特殊对象,该对象的“数据”是一堆实现其它对象行为的 C 函数指针,类似于 C++ 的虚函数表。

一个类型的类型始终是一个特殊的类型对象(The type of a type was always a special type object),你可以将其称为元类型(meta-type),因为它是自己的类型。

当时我对 Smalltalk 只有模糊的了解;当我后来读到它的元类设计时,我感到很惊讶,因为它与 Python 或 Ruby 中的元类有很大的不同!

但是,Smalltalk 的字节码对 Python 的字节码影响很大。我在 Adele Goldberg 和其他人的一本书中读到过,好像是《Smalltalk-80: The Language and its Implementation》。

smalltalk 书

(译文完)

以上文章出自 Guido 的《The History of Python》系列,该系列主要是关于 Python 语言及社区的发展历史。我曾翻译过该系列的最新一篇《pgen 解析器的起源》,曾打算把其它文章也陆续翻译出来……(只是曾)……

巧合的是,就在本文刚译完而查资料时,我无意中发现有人在 2019 年上半年已经把该系列翻译出来了(他翻译了 25 篇,正好不含我所译的最新一篇)!这些译文,我竟然一直从未阅读过!

该译者也有公众号,我好奇翻看了一些文章,发现不少的阅读量只有 10 几个!看来那位译者是没有怎么花心思运营啊,纯粹是当做了一种学习兴趣,默默做事,不求掌声。

所以,如果你对 Python 历史相关内容感兴趣的话,我诚心推荐你关注“ReadingPython”,查看其历史文章。(另外,该译者正在译《Python behind the scenes》系列,这也是我的翻译计划之一,而且实际已经把一篇 1.4 万字的译了一半后就搁置了好几个月……)

推荐阅读:

1、与 Python 之父聊天:更快的 Python!

2、Python 之父爆料:明年至少令 Python 提速 1 倍!

3、Python之父重回决策层,未来如何发展?

4、聊聊 Python 的内置电池

5、从 Python 之父的对话聊起,关于知识产权、知识共享与文章翻译

如果你觉得本文有帮助

请慷慨分享点赞,感谢啦

Python 的元类设计起源自哪里?相关推荐

  1. python设计一个长方形类_类设计模式python学习~元类

    废话就不多说了,开始... 元类是类的模版,在类的层次上标准类的行为. 面下用使元类现实单例设计模式(设计模式九 采取的是另一种方法): from warnings import * 每日一道理 坚持 ...

  2. python 用元类 type 实现对数据库的ORM 映射

    python 实现对数据库的ORM 映射 如果使用pymysql 操作数据库 不借助框架的话,频繁写sql语句, 的确比较麻烦 这里借助 type 元类 对 数据表类实现了 与mysql之间的 映射 ...

  3. Python使用元类约束派生类中必须实现指定的成员

    推荐图书: <Python程序设计(第3版)>,(ISBN:978-7-302-55083-9),董付国,清华大学出版社,2020年6月第1次印刷,2021年12月第11次印刷,山东省一流 ...

  4. python元类是什么_谈谈Python中元类Metaclass(一):什么是元类

    简单的讲,元类创建了Python中所有的对象. 我们说Python是一种动态语言,而动态语言和静态语言最大的不同,就是函数和类不是编译时定义的,而是运行时动态创建的. 比方说我们要定义一个HelloW ...

  5. Python之元类ORM

    1. 什么是元类 在Python中一切皆对象,类也是一个对象,实例对象由类创建出来的,类是由元类创建出来的.简而言之,用来创建类的类就叫元类(metaclass). 函数type其实就是一个元类,ty ...

  6. python的元类与类继承的区别

    类的继承,主要涉及   类之间关系. 元类metaclass,某种意思上可以理解为类的父类:类是元类的实例. 第一:type函数创建类 在python中,类也是对象.既然是类是对象,必然有个存在生成它 ...

  7. Python 的元类问题

    一.元类 ​       元类 ​      元类就是类的类,python中函数type实际上是一个元类.type就是Python在背后默认用来创建所有类的元类.Python中所有的东西--都是对象. ...

  8. Python的元类的用法

    元类介绍 type可以直接生成类(class),但也可以先生成元类(metaclass),再使用元类批量定制类(class) 使用 class 创建类 ​ class Hello():def say( ...

  9. python中扑克牌类设计_Python类的基础设计、使用

    类是事物功能和属性的抽象,对象是类的实例化.就像人人都知道小汽车可以干什么什么的,但光想小汽车如何好是没有用的,得开车或坐才能感受到小汽车的好.人脑里的小汽车是抽象的,即类,而坐上的某辆车是小汽车的实 ...

最新文章

  1. 如何实现链接只能被点击一次
  2. Swagger3.0 天天刷屏,真的香吗?
  3. ntu 课程 ERIC(2):Planning your research
  4. 在VS2010 中使用subversion 进行代码的分支与合并
  5. NEWS - InstallShield 2015 正式发布
  6. 谈谈我这几年的C++学习之路
  7. 给你的数据来一个顶层设计
  8. ArcGIS JavaScript在线编辑
  9. 详细解说STL string
  10. matlab slope函数,Matlab常用函数汇总
  11. java解决硬编码_工具类 解决硬编码问题
  12. 网页无插件播放RTSP流媒体
  13. SVN Cleanup失败的解决方法
  14. 浙江大学计算机学院师资队伍,浙江大学计算机科学与技术学院导师教师师资介绍简介-朱建科...
  15. 利用div实现遮罩层效果
  16. Android go app 安装包,安卓go系统刷机
  17. Docker_使用DockerFile监本构建镜像
  18. Win11资源管理器(文件夹)出现的工具栏怎么隐藏?
  19. SpringBoot-Mongodb双数据源配置
  20. 谷歌浏览器突然不能翻译成中文

热门文章

  1. pix2pix(一)制作样本对并进行训练与测试
  2. 中国最有钱大学排行,北大只能排第三
  3. MATLAB函数——newff()
  4. C语言 const详解
  5. python什么是多态_Python中的多态是什么
  6. 什么是固定资产(亿)?
  7. 论微软与腾讯——贪心者的命运
  8. CPU和存储器的分类
  9. 吃鸡服务器维护公告10月19日,绝地求生12月19日怎么进不去 绝地求生12月19日维护公告内容一览...
  10. vue 使用addRoutes()合并动态有权路由