PYTHON 源码阅读 - 类型

这篇主要涉及Python对象的类型机制

有点绕, 一定要思维清晰的时候再看哦:)


一个例子

我们反向推导一个int对象是怎么生成的.


1. 首先, 定义一种类型叫PyTypeObject

代码位置 Include/object.h

定义

说明

所有Type都是PyTypeObject的”实例”: PyType_Type/PyInt_Type


2. 然后, 用PyTypeObject初始化得到一个对象PyType_Type

代码位置 Objects/typeobject.c

定义

说明

结构

第一张图, 箭头表示实例化(google doc用不是很熟找不到对应类型的箭头)
PyType_Type

第二张图, 箭头表示指向
PyType_Type2

使用

注意: 无论任何时候, ob_type指向的是 PyTypeObject的实例: PyType_Type/PyInt_Type…


3. 再然后, 定义具体的类型, 这里以PyInt_Type为例子

代码位置 Objects/intobject.c

定义

说明

结构

PyType_Type2

使用


4. 最后, 生成一个整数对象int

代码位置 Include/intobject.h

定义

结构

PyType_Type2


到这里, 总结下


多态是如何实现的?

对象的多态, 例如hash

从上面数据结构可以看到, 方法及属性, 在不同Type实例化时就确定了

Python内部传递的是泛型指针PyObject *, 函数调用时, 找到其类型* ob_type, 然后调用

即: 大量函数指针决定了该类型的具体行为


changelog

打赏支持我写出更多好文章,谢谢!

打赏作者

打赏支持我写出更多好文章,谢谢!

任选一种支付方式

1 2 收藏 1 评论

关于作者:wklken

Pythonista/vimer 个人主页 · 我的文章 · 37 ·   

相关文章

可能感兴趣的话题



直接登录
最新评论
跳到底部
返回顶部