1.3 Python 对象的多态性
通过PyObject 和PyTypeObject,Python 利用C 语言完成了C++所提供的对象的多态的特性。在Python 创建一个对象,比如PyIntObject 对象时,会分配内存,进行初始化。然后Python 内部会用一个PyObject*变量,而不是通过一个PyIntObject*变量来保存和维护这个对象。其他对象也与此类似,所以在Python 内部各个函数之间传递的都是一种范型指针——PyObject*。这个指针所指的对象究竟是什么类型的,我们不知道,只能从指针所指对象的ob_type 域动态进行判断,而正是通过这个域,Python 实现了多态机制。
考虑下面的Print 函数:
void Print(PyObject* object) |
如果传给Print 的指针是一个PyIntObject*,那么它就会调用PyIntObject 对象对应的类型对象中定义的输出操作,如果指针是一个PyStringObject*,那么就会调用PyStringObject 对象对应的类型对象中定义的输出操作。可以看到,这里同一个函数在不同情况下表现出了不同的行为,这正是多态的核心所在。
前面已经提到的AOL 的C API 正是建立在这中“多态”机制之上的。下面给出了一个简单的例子:
[object.c] |
| 回书目 上一节 下一节 |
|
||||
| · 无线路由器故障处理 · 解析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岁技术人的价值.. |
|||