init - 在创建类时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函数的位置。
解决方案
自行查找结果,type_new 会调用 PyType_Ready 和 fixup_slot_dispatchers,在后面的函数中用户定义的函数会在 slot 中处理。
推荐阅读
- django - 在 django 中为现有数据库表创建模型
- azure - 提供 Azure 托管标识 Directory.Read.All
- angular - NGRX 选择器抛出无法读取未定义的属性“tourProvider”
- javascript - 事件声明中是否需要“function()”?
- string - 基于字符串评估创建新的位列
- hyperledger-fabric - Hyperledger Fabric 中orderer genesis block 的重要性是什么?
- excel - 从单元格引用中获取文件名和路径
- ilog - 为决策表中创建的新行生成 ID(用户不可编辑)
- javascript - 如何在 NodeJS 中使用 IMAP 通过 messageId 获取电子邮件线程?
- amazon-web-services - S3 和大文件备份