点击上方蓝色小字 “小菜学编程” ,关注我们?
经过前面章节,我们知道 float 对象背后由 PyFloatObject 组织,对其结构也了然于胸。 那么,本节为何要重复讨论 float 对象呢?
一方面, 对象模型 中关于 float 对象的讨论, 着眼于 Python 面向对象体系的讲解,许多细节没来得及展开。
另一方面, float 作为 Python 中最简单的对象之一,“麻雀虽小,五脏俱全”, 拥有对象的全部必要属性。以 float 对象为起点开启源码之旅,能够快速上手,为研究更复杂的内置对象打好基础,建立信心。
内部结构
float 实例对象在 Include/floatobject.h 中定义,结构很简单:
typedef struct {
PyObject_HEAD
double ob_fval;
} PyFloatObject;
除了定长对象共用的头部,只有一个额外的字段 ob_fval ,存储对象所承载的浮点值。
float 类型对象又长啥样呢?
与实例对象不同, float 类型对象 全局唯一 ,因此可以作为 全局变量 定义。在 C 文件 Objects/floatobject.c 中,我们找到了代表 float 类型对象的全局变量 PyFloat_Type :
PyTypeObject PyFloat_Type = {
PyVarObjec