python 如何查看内置成员的代码?

请问,如何查看如 list tuple str 等内置对象及其属性和方法的代码?
尝试了 inspect.getsource 方法,但是貌似内置成员是无法获取其源码的。
主要是想定义一些内置对象的子类,以实现特殊的一些功能,比如假如我想实现:

a = [1, 2, 3, ..., 9]

这样的赋值形式,从而获得:
图片描述

这样的结果。

就需要改写 list 的某些方法,但是我不知道需要改写哪个方法(比如 __init__还是 __setitem__或者其他),也不知道这些内置方法参数如何设置,怎么实现,如果能够看到源码我想可能会好点。

阅读 3.8k
2 个回答

如果要实现 a = [1, ..., 9] 得到 a[1,2,3,4,5,6,7,8,9],相当于要修改 Python 本身处理 list 字面量的机制,也就是需要直接修改 Python 这个程序。

但是,既然 ... 是值 Ellipsis 的字面量,那么写一个函数展开 [1, Ellipsis, 9] 作为你的 list 子类的构造方法当然是可以的。

不过,使用 a = list(range(1,9+1)) 不是更简单吗?


回答问题,list 相关实现的源代码在这里: https://hg.python.org/cpython/file/tip/Objects/listobject.c 。我觉得对于实现你的预期没有帮助。

要从文法上修改 Python,需要修改这个 https://hg.python.org/cpython/file/tip/Grammar/Grammar 文件,然后编写许多 C 代码,然后重新编译一个你自己的特殊的 Python,……,good luck!

楼上回答的很到位, built-in基本都是c编写, 属于python解释器直接支持的部分, 标准库则是使用python编写的扩展. 如果你这是改写增加以下工程, 建议你使用类自己继承, 并添加自己的函数.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进