[英]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
.
我的问题是:
是否有理由/设计决定为什么object
是type
的实例并且type
继承自object
? object 的type
/类本身是否也是 object 本身?
class ( type
)如何成为其自身的实例?
哪一个是真正的基础 class object
或type
?
我一直认为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:本书的另一个链接。 如果它也死了,请告诉我。
回答您的问题的最重要部分:
是的,根据第 1 章的规则 1:
“一切都是 object……我们定义的任何类都是对象,当然,这些类的实例也是对象。”
object
或type
?从第 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被定义。类型是自身的一个实例这一事实也很神奇。
所以,对于你的问题:
Luciano 说它也不能用 Python 来表达。
非常感谢在第 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.