请问,如何查看如 list tuple str 等内置对象及其属性和方法的代码?
尝试了 inspect.getsource 方法,但是貌似内置成员是无法获取其源码的。
主要是想定义一些内置对象的子类,以实现特殊的一些功能,比如假如我想实现:
a = [1, 2, 3, ..., 9]
这样的赋值形式,从而获得:
这样的结果。
就需要改写 list 的某些方法,但是我不知道需要改写哪个方法(比如 __init__还是 __setitem__或者其他),也不知道这些内置方法参数如何设置,怎么实现,如果能够看到源码我想可能会好点。
楼上回答的很到位, built-in基本都是c编写, 属于python解释器直接支持的部分, 标准库则是使用python编写的扩展. 如果你这是改写增加以下工程, 建议你使用类自己继承, 并添加自己的函数.
如果要实现 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!