Python 中的 object 和 type 是什么关系?

在 Python 中万物皆对象,这句话是对的,但是只道出了 Python 中对象之间一方面的关系,即实例关系。

* 对象是类的实例:对象 a 是类 A 的一个实例;

* 类是元类的实例:类 A 是元类的一个实例;

type 即是元类中的默认元类,如果在构建一个类的时候,没有指定元类,则默认使用 type 作为元类。

除了实例关系之外,还有亲缘关系,如父子关系、兄弟关系,形成这样的关系,并不是靠实例化某一个类来达成的,而是一个或多个类通过继承、组合的过程来实现,在这个过程中追根溯源到一个基础的类,就是 object。

本质上 object 是一个类,它由 type 元类实例化而来,在各种类亲缘关系的构建过程中,扮演着一个默认的存在,正是有了这个 object,我们就不用再自己通过 type 来实例化一个基础类了。

如果再深入一点,元类也是类的一种,那么元类的元类是元类,从这种关系上讲,type 实际上是继承自 object。

整个 「Python 中万物皆对象」的理论完全构建在这一自洽的设定之上。

>>> object.__class__
# object 是 type 实例化而来的一个类

>>> object.__bases___
() # object 这个类没有父类

>>> type.__class__
# 元类的元类是元类

>>> type.__bases__
# type 是父类是 object

知乎链接 https://www.zhihu.com/question/38791962,更深入地讨论了这个问题。

Advertisements
此条目发表在未分类分类目录。将固定链接加入收藏夹。

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s