繁体   English   中英

为什么`object`是`type`的实例而`type`是`object`的实例?

[英]Why is `object` an instance of `type` and `type` an instance of `object`?

我对object和 Python 3 中的type类有点困惑。也许有人可以澄清我的困惑或提供一些额外的信息。

我目前的理解是,每个 class (除了object )都继承自一个名为object But every class (including object ) is also an instance of the class type , which is an instance of itself and object and also inherits from object .

我的问题是:

  • 是否有理由/设计决定为什么objecttype的实例并且type继承自object object 的type /类本身是否也是 object 本身?

  • class ( type )如何成为其自身的实例?

  • 哪一个是真正的基础 class objecttype
    我一直认为object会是最“基本”的 class,但它似乎是type的一个实例,它是object的一个实例,这是一个 end type的递归,...

  • 是否有可能说明object和 class type之间的关系?

我尝试查找object的条目并type Python 标准库的文档。

每个 class(对象除外)都继承自 object。

>>> for x in object, int, float, str, list, dict:
...     print(f'{x.__name__:6}: {x.__bases__}')
... 
object: ()
int   : (<class 'object'>,)
float : (<class 'object'>,)
str   : (<class 'object'>,)
list  : (<class 'object'>,)
dict  : (<class 'object'>,)

每个 class 都是 class type的实例。

>>> for x in object, int, float, str, list, dict:
...     print(f'{x.__name__:6}: {x.__class__}')
... 
object: <class 'type'>
int   : <class 'type'>
float : <class 'type'>
str   : <class 'type'>
list  : <class 'type'>
dict  : <class 'type'>

type是它自己的一个实例。

>>> type.__class__
<class 'type'>

type也继承自object

>>> type.__bases__
(<class 'object'>,)

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

您所有问题的答案都可以在本书中找到: Python 类型和对象

UPD:本书的另一个链接 如果它也死了,请告诉我。

回答您的问题的最重要部分:

  • object 的类型/类别本身是否也是 object 本身?

是的,根据第 1 章的规则 1:

“一切都是 object……我们定义的任何类都是对象,当然,这些类的实例也是对象。”

  • 哪一个是真正的基础 class objecttype

从第 2 章开始:

“这两个对象是 Python 中的原始对象。我们不妨一次只引入一个,但这会导致鸡和蛋的问题——先引入哪个?这两个对象是相互依赖的——因为它们不能独立存在它们是相互定义的。”

Luciano Ramalho 在他的“Fluent Python”一书中也说这种关系不能用 Python(第 21 章)来表达:

"The classes object and type have a unique relationship: object is an instance of type, and type is a subclass of object. This relationship is "magic": it cannot be expressed in Python because either class would have to exist before the other could被定义。类型是自身的一个实例这一事实也很神奇。

所以,对于你的问题:

  • class(类型)如何成为其自身的实例?

Luciano 说它也不能用 Python 来表达。

  • 是否有可能说明 object 和 class 类型之间的关系?

非常感谢在第 3 章中制作此插图的作者:

对象、类型和其他类之间的关系

<class 'type'>是 class object的元类,每个 class (包括type )都直接或间接继承自object (包括 type )。

如果您需要了解更多关于元类的信息,请点击此处https://realpython.com/python-metaclasses/

According to Python Data Model , everything in Python is an object and every object has an identity, a type and a value.

object is the base class for all objects, type is also an object, so it is an instance of object , and same for object itself. 同样type是所有 object 类型的基础 class ,因此object的类型是type ,并且type本身也是如此。

这是我的理解,如有错误欢迎指出。

我意识到它与 Java 中的 instanceKlass 和 _java_mirror 非常相似

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM