未完结
在上一篇中我们了解到了 PyObject 这个结构只有两个内容:一个引用计数, 一个类型信息. 但是在现实的编程过程中缺失了一些去区别python每一个类型的信息,比如a=1、b=[1,2,3], 结构体的引用计数为1, 类型为整型和list型但是没有对1 和变量名 a 、[1,2,3]和变量b的表达
这说明,了PyObject 仅仅是对象的共有的部分, 在使用上还需要其他的定义
我们在学习python的过程中,比较经常听到的一句话叫做 ,python处处皆对象。这是对于python对象模型的高度概括的描述。Python中的变量,实际上是一个名字,指向所引用的对象。Python中有“名字空间”的概念,这类似于其他编程语言中的作用域。在python中,名字空间底层由一个dict实现,变量名就是字典中的键,而变量引用的对象就是字典中键对应的值。 在上一篇中我们知道PyObject 这个结构只有两个内容:一个引用计数, 一个类型信息. 似乎少了一些"内容", 比方说python代码中 a = 1 , 结构体的引用计数为1, 类型为整型, 却没有保存 1 和变量名 a .
这样说明, PyObject 仅仅是对象的共有的部分, 在使用上还需要"其他的内容".
那么现在我们知道,不同于其他的语言,python中的整数,布尔值,字符串等类型的变量均是一个对象而不是简单的值。更进一步的,python中的所有语法元素,全部都是对象。函数是函数对象,模块是模块对象,最特殊的是,对象的类型也是一个对象。 Python中的面向对象机制与java等语言,所有的类型默认继承自基类object,或者某个object的派生类型。但是由于在python中类型也是一个对象,所以包含基类object在内的所有类型,都是对象实例。区别于普通对象,我们姑且把描述类型的对象叫做 类对象。所有类对象的类型被叫做元类(metaclass),元类默认是一个type类对象,或者某个继承自type的类对象。最后,type类对象的类型是type自身。
(adsbygoogle = window.adsbygoogle || []).push({});