python元类,类型类和对象类

时间:2015-06-01 03:07:42

标签: python object inheritance typeclass metaclass

我很难理解在metaclass类型,object类和class类型之间退出的循环关系。

我试图理解python如何使一切成为一个对象。它是因为一切都是元类类型的实例,或者是因为一切都是对象类的子类。

如果因为是对象类的子类,这是否意味着类对象被命名为类pyobj。这是否意味着Python中的所有内容都以pyobj开头?

我知道元类创建的对象是类型/类,然后使用这些类型创建其他对象。

由此:

>>> isinstance(type, object)
True
>>> isinstance(object,type)
True
>>> issubclass(object,type)
False
>>> issubclass(type,object)
True

安全地说python首先使用类型元类创建类对象(为简洁起见,我简化了元类)。

type('object',(),{})

这意味着类对象是一个类类的类,它不会继承其他类的任何属性。

然后它创建类类型:

type('type', (object,),{})

暗示类型类是类类的类,它从对象类继承属性。

然后通过继承类对象

来创建其他类
type('dict', (object,), {})  
type('Animal', (object), {})

类似于创建一个Animal类:

class Animal:
     pass

这是否意味着用于创建类对象的元类仍然是用于创建此Animal类的元类,或者是默认使用的元类类型?

正在使用哪种类型,是元对象类型还是在创建对象后创建的类型类?

使用基类对象创建的类类型在哪里发挥作用?

我还试图了解上面和本文{(3}}

中所有回答中对象和类之间的真实情况。

我仍然感到困惑。在对象创建方面,这两个类之间有什么关系?

我会得到这个还是鸡蛋和鸡蛋的情况?

1 个答案:

答案 0 :(得分:1)

Python的核心类型确实存在鸡和蛋的情况。 type继承自object,但objecttype的实例。

你无法真正推断出在Python中首先定义了哪个objecttype,因为在常规Python代码中你无法建立他们的关系。 Python解释器可以在设置环境之前通过摆弄内部来实现,所以如果没有预先完全定义类型并不重要。

在您调用type来创建新objecttype类型的示例中,您实际上并未获得与真实type和{相同的对象{1}},因为您的新object类型是内置object元类的实例,而不是您稍后创建的手工制作的type元类。

这里大致说明了口译员如何处理它。代码实际上不起作用,因为您不能在不继承type的情况下创建新样式的类,也不能重新分配object对象的type属性(使{{1} 1}} __class__)的一个实例。如果可以,您可以启动自己的独立类型系统!

object