首页 > 解决方案 > 在创建类时python调用用户定义的__init__的cpython源代码中

问题描述

我正在阅读cpython源代码类实现,我知道类定义和创建的基本过程。

类定义:load_build_class -> builtin_build_class -> mata -> type_call -> type_new

类创建:type_call -> type_new

我知道用户定义的函数存储在命名空间中,最后存储到该类型的 tp_dict 中。

我的问题:用户定义的init函数存储在type->tp_dict中,当python初始化一个它调用type->tp_init函数的类型时,我在cpython源代码中找不到在创建类时调用用户定义的init函数的位置。

标签: initcpython

解决方案


自行查找结果,type_new 会调用 PyType_Ready 和 fixup_slot_dispatchers,在后面的函数中用户定义的函数会在 slot 中处理。


推荐阅读