根据我对Python 3的理解,类型type
是用于创建Class对象的元类,因此type
是object
,因为“Car”是“Jaguar”,通过调用其__call__
方法然后调用类的__new__
和__init__
方法,返回类本身的实例。
在正常水平,类型和对象之间的关系是完全有意义的;一切都是一个对象(子类object
),一切都有一个类型;对象5
的类型为int
,int
的类型为type
。因此isinstance(5, int)
和isinstance(int, type)
都是正确的。但是,isinstance(5, type)
不正确,因为5
不是类对象,它是类的实例。
因此将对象定义为只有一种类型。但是在非常原始的层面上,类type
和object
本身,它们之间的关系让我困惑。 type
是object
的子类,如__bases__
所示,但object
本身是type
的实例。
如果描述像5这样的东西可以分成“肉”和“骨头”,其中“肉”代表它在内存中的实际创建并为其赋值,并“骨头”定义它应该如何,其价值和行为的合法范围,这是否意味着,type
负责创建类对象的“肉”,object
负责定义“骨骼” ?如果是这样,如果在这种情况下“骨头”是类int
,那么创建类实例的“肉”是什么?
答案 0 :(得分:4)
Python中的每个对象类都继承了object
类的行为。首先,它意味着
>>> isinstance(x, object)
True
无论x
碰巧绑定什么,都将在Python 3中成立。它还意味着一切都将继承object
的方法,除非被更具体的类覆盖。因此,如果x == y
或object.__eq__
都没有超越x
方法,y
将求助__eq__
。
type
也是一个对象 - 它继承自object:
>>> isinstance(type, object)
True
这意味着type
是一个对象,它继承了object
类的行为。这就是让人们写出像
>>> type == type
True
>>> type.__eq__
<slot wrapper '__eq__' of 'object' objects>
type.__eq__
继承自object
类。
但object
类本身也是一种类型:
>>> isinstance(object, type)
True
这意味着作为对象的类object
继承了type
的行为 - type
是对象的元类。
当然type
的元类是类型:
>>> isinstance(type, type)
True
课程object
也是object
:
>>> isinstance(object, object)
True
当你构造一个类的实例时,类本身负责该类的肉和骨骼,但也许可以区分为骨骼遵循普通的类继承,并且肉类在类之间分开和元类血统;并且元类也是类对象本身的骨骼。