Python 的 type 、object 和 java 的 class、object

Python 的 type 、object 和 java 的 class、object 都是类似于鸡生蛋蛋生鸡的问题,此处对比理解一下:

一、Python 的 type 、object

object 和 type的关系很像鸡和蛋的关系,先有object还是先有type没法说,obejct和type是共生的关系,必须同时出现的。

在Python的世界中,object是父子关系的顶端,所有的数据类型的父类都是它;type是类型实例关系的顶端,所有对象都是它的实例的。

  • type是所有元类的父亲。我们可以通过继承type来创建元类。
  • object是所有类的父亲,大部份我们直接使用的数据类型都存在这个列的。
  • object的type是type

python3当中所有类都默认继承自object类,这些类默认的metaclass是type,元类控制着类的创建,使得python类的创建具有灵活性

这是python动态语言的表现之一


动态语言的定义:动态编程语言高级程序设计语言的一个类别,在计算机科学领域已被广泛应用。

它是一类在执行时能够改变其结构的语言:比如新的函数、对象、甚至代码能够被引进,已有的函数能够被删除或是其它结构上的变化。

动态语言眼下很具有活力。


二、java 的 class、object 

java.lang.Class是java.lang.Object的派生类,前者继承自后者。

在一个已经启动完毕、可以使用的Java对象系统里,必须要有一个java.lang.Class实例对应java.lang.Object这个类;而java.lang.Class是java.lang.Object的派生类,按“一般思维”前者应该要在后者完成初始化之后才可以初始化

Class 类的实例表示正在运行的 Java 应用程序中的类和接口,通过class对象,可以得到这个类的详细信息。(与反射机制相关的)

====================================================================

“鸡・蛋”问题通常都是通过一种叫“自举”(bootstrap)的过程来解决的。

“鸡蛋问题”的根本矛盾就在于假定了“鸡”或“蛋”的其中一个要先进入“完全可用”的状态。而许多现实中被简化为“鸡蛋问题”的情况实际可以在“混沌”中把“鸡”和“蛋”都初始化好,而不存在先后问题;在它们初始化的过程中,两者都不处于“完全可用”状态,而完成初始化后它们就同时都进入了可用状态。

这些核心类型的type对象在CPython里的C层面的类型是PyTypeObject,其结构是确定的;它们的存储空间通过静态变量分配,例如就声明为在 object.h的PyTypeObject PyType_Type,对应的还有的PyTypeObject PyBaseObject_Type。
所以在进行初始化动作之前它们的存储空间就已经有着落了,真正做初始化时只要把它们的相互引用串起来就好。


你可能感兴趣的:(Python 的 type 、object 和 java 的 class、object)