1.2 类型对象
在上面的描述中,我们看到了Python 中所有对象共有信息的定义。所以,当内存中存在某一个Python 对象时,该对象开始的几个字节的含义一定会符合我们的预想。但是,当我们顺着时间轴追溯,就会发现一个问题。当在内存中分配空间,创建对象的时候,毫无疑问地,必须要知道申请多大的空间。显然,这不会是一个定值,因为不同的对象,需要不同的空间,一个整数对象和一个字符串对象所需的空间肯定不同。那么,对象所需的内存空间的大小的信息到底在哪里呢?显然在PyObject 中没有这样的信息。其实,这样的说法是不对的,这个信息虽然不显见于PyObject 的定义中,但它恰恰是隐身于PyObject之中。
实际上,占用内存空间的大小是对象的一种元信息,这样的元信息是与对象所属类型密切相关的,因此它一定会出现在与对象所对应的类型对象中。现在我们可以来详细考察一下类型对象_typeobject:
[object.h] |
在_typeobject 的定义中包含了许多的信息,主要可以分为4 类:
类型名,tp_name,主要是Python 内部以及调试的时候使用;
创建该类型对象时分配内存空间大小的信息,即tp_basicsize 和tp_itemsize;
与该类型对象相关联的操作信息(就是诸如tp_print 这样的许多的函数指针);
我们在下面将要描述的类型的类型信息。
事实上,一个PyTypeObject 对象就是Python 中对面向对象理论中“类”这个概念的实现,而PyTypeObject 也是一个非常复杂的话题,我们将在第2 部分专门以一章的篇幅详细剖析构建在PyTypeObject 之上的Python 的类型和对象体系。这里仅仅是对PyType-Object 做一个粗略的介绍,如果读者有不太明白的地方,可以跳过,这并不影响第一部分的阅读。
| 回书目 上一节 下一节 |
|
||||
| · 无线路由器故障处理 · 解析35岁技术人的价值.. · 无线重中之重:安全问题 · 无线局域网基本知识 · 家庭无线局域网 · 华为七千人主动辞职规.. · 微软出价446亿美元收购.. · 虚拟化的“赤壁之战” |
· Windows Server 2008专.. · 802.11n:下一代的无线.. · 脉冲无线电uwb专题 · AIX操作系统管理应用 · 云计算时代来临 · 求职必杀技 决战面试官 · 龙芯要做中国的“奔腾” · 2008年上半年IT技术图.. |
|||
|
||||
| · SOA 面向服务架构 · SQL Server 2008/2005.. · Apache技术专题 · 三层交换技术专题 · SQL Server入门到精通 · 无线网状网(MESH) · Windows远程桌面应用 · C#技术开发指南 |
· Apache技术专题 · Windows集群服务应用 · C#技术开发指南 · 文档格式标准开战 OOXM.. · 路由器设置与口令恢复 · Linux 集群技术专题 · PHP开发应用手册 · SOA 面向服务架构 |
|||
|
||||
| · SQL Server入门到精通 · SQL Server 2008/2005.. · SOA 面向服务架构 · Apache技术专题 · C#技术开发指南 · 三层交换技术专题 · Apache技术专题 · C#技术开发指南 |
· Windows远程桌面应用 · 企业数据恢复指南 · Windows集群服务应用 · 路由器设置与口令恢复 · Linux 集群技术专题 · SOA 面向服务架构 · 了解统一威胁管理(UTM).. · 解析35岁技术人的价值.. |
|||