我想知道 python 列表类型的 __setitem__ 和 __getitem__ 代码是在哪里定义的。我知道列表是用C实现的,但是我找不到实现列表索引和切片操作的代码。
请您参考如下方法:
您会在 listobject.c file 中找到所有内容.
list_methods() structure 中列举了它的方法.您可能还想研究 PyList_Type structure进一步指向各种 Hook 的实现。
因为 __getitem__ 和 __setitem__ 都是 C sequence protocol 的一部分, PyList_Type 结构指向一个新结构 list_as_sequence定义那些钩子(Hook),在 PyList_Type 的 tp_as_sequence 插槽中列出。
list_item function实现 __getitem__ 钩子(Hook),__setitem__ 由 list_ass_item 表示.
另一方面,切片由映射协议(protocol)处理,您最终(通过 list_as_mapping )位于 list_subscript和 list_ass_subscript .
