1.2.3 类型的类型
仔细观察PyTypeObject,会有一个有趣的发现。在PyTypeObject 定义的最开始,可以发现PyObject_VAR_HEAD,这意味着Python 中的类型实际上也是一个对象。没错,在Python 中,任何一个东西都是对象,而每一个对象都是对应一种类型的,那么一个有趣的问题就出现了,类型对象的类型是什么呢?这个问题听上去很绕口,实际上却非常重要,对于其他的对象,可以通过与其关联的类型对象确定其类型,那么通过什么来确定一个对象是类型对象呢?答案就是PyType_Type:
[typeobject.c] |
|
| 图1-5 PyType_Type 与一般PyTypeObject 的关系 |
图1-5 中那个一再出现的
我们接着来看PyInt_Type 是怎么和PyType_Type 建立关系的。前面提到,在Python中,每一个对象都将自己的引用计数、类型信息保存在开始的部分中。为了方便对这部分内存的初始化,Python 中提供了几个有用的宏:
[object.h] |
再回顾一下PyObject 和PyVarObject 的定义,初始化的动作就一目了然了。实际上,这些宏在各种内建类型对象的初始化中被大量地使用着。
以PyInt_Type 为例,可以更清晰地看到一般的类型对象和这个特立独行的PyType_Type 对象之间的关系:
[intobject.c] |
|
| (点击查看大图)图1-6 运行时整数对象及其类型之间的关系 |
| 回书目 上一节 下一节 |
|
||||
| · 无线路由器故障处理 · 解析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岁技术人的价值.. |
|||