我很难理解在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}}
中所有回答中对象和类之间的真实情况。我仍然感到困惑。在对象创建方面,这两个类之间有什么关系?
我会得到这个还是鸡蛋和鸡蛋的情况?
答案 0 :(得分:1)
Python的核心类型确实存在鸡和蛋的情况。 type
继承自object
,但object
是type
的实例。
你无法真正推断出在Python中首先定义了哪个object
或type
,因为在常规Python代码中你无法建立他们的关系。 Python解释器可以在设置环境之前通过摆弄内部来实现,所以如果没有预先完全定义类型并不重要。
在您调用type
来创建新object
和type
类型的示例中,您实际上并未获得与真实type
和{相同的对象{1}},因为您的新object
类型是内置object
元类的实例,而不是您稍后创建的手工制作的type
元类。
这里大致说明了口译员如何处理它。代码实际上不起作用,因为您不能在不继承type
的情况下创建新样式的类,也不能重新分配object
对象的type
属性(使{{1} 1}} __class__
)的一个实例。如果可以,您可以启动自己的独立类型系统!
object