【问题标题】:python metaclass,type class and the object classpython元类,类型类和对象类
【发布时间】:2015-08-14 09:58:51
【问题描述】:

我很难理解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 类的元类,还是默认使用的元类类型?

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

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

我还试图从他上面的所有回复以及本文http://www.cafepy.com/article/python_types_and_objects/python_types_and_objects.html中的所有回复中了解对象和类之间到底发生了什么@

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

我会得到这个还是先有鸡还是先有蛋?

【问题讨论】:

标签: python object inheritance typeclass metaclass


【解决方案1】:

Python 的核心类型确实是先有鸡还是先有蛋。 type 继承自 object,但 objecttype 的一个实例。

您无法真正推断出objecttype 中的哪一个首先在Python 中定义,因为在常规Python 代码中您无法建立它们的关系。 Python 解释器通过在设置环境之前摆弄内部结构来做到这一点,因此如果没有预先完全定义类型并不重要。

在您调用type 以创建新的objecttype 类型的示例中,您实际上并没有获得与真正的typeobject 等效的对象,作为您的新@987654332 @type 是内置type 元类的一个实例,而不是您稍后创建的手工制作的type 元类。

这里是解释器如何处理它的大致说明。该代码实际上不起作用,因为如果不从 object 继承就无法创建新样式类,也不能重新分配 type 对象的 __class__ 属性(以使 object 成为 @987654339 的实例@)。如果可以,您可以启动自己的独立类型系统!

my_object = type('my_object', (), {}) # this doesn't work right, it inherits from object
my_type = type('my_type', (my_object,), {})
my_object.__class__ = my_type     # this doesn't work at all (it will raise an exception)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-18
    • 1970-01-01
    • 2021-06-04
    • 2023-04-01
    • 2012-11-11
    • 1970-01-01
    • 2013-11-15
    • 1970-01-01
    相关资源
    最近更新 更多