【发布时间】:2017-07-16 08:16:57
【问题描述】:
根据我对 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,那么创建类实例的“肉”等价物是什么?
【问题讨论】:
-
object实际上只是 Python 支持的所有对象的通用属性集,因此我将 object 称为实例/类/元类的“裸骨”。一个类(如int)实际上只是向下一层类型的扩展。type规定了类可以做什么和不能做什么,而类规定了实例可以做什么和不能做什么。 -
对,但是是否可以在影响他们创建的类的实例的元类中放入属性?
标签: python python-3.x types