为什么 `object` 是 `type` 的实例而 `type` 是 `object` 的实例?
Why is `object` an instance of `type` and `type` an instance of `object`?
我对 Python 中的 object
和 type
class 有点困惑 3. 也许有人可以消除我的困惑或提供一些额外的信息.
我目前的理解是,每个 class(object
除外)都继承自一个名为 object
的基 class。但是每个class(包括object
)也是class的一个实例type
,它是它自己和object
的一个实例,也继承自object
.
我的问题是:
是否有 reason/design 决定为什么 object
是 type
的实例并且 type
继承自 object
?对象的type
/class是否也是对象本身?
class (type
) 怎么可能是它自己的实例呢?
classobject
和type
哪个才是真正的基地?
我一直以为object
会是最"fundamental"class,但是好像是type
的实例,是object
的实例,也就是type
的实例,...
这个递归在哪里结束?
有没有可能说明object
和type
class之间的关系?
我尝试在 Python 标准库的文档中查找 object
和 type
的条目。
每个 class(对象除外)都继承自对象。
>>> 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
<class 'type'>
是classobject
的metaclass,每个class(包括type
)都直接或间接继承来自 object
.
如果您需要找到更多关于 metaclasses 的信息,请查看此处 https://realpython.com/python-metaclasses/
您所有问题的答案都可以在本书中找到:Python Types and Objects
更新:another link to the book。如果它也死了,请告诉我。
回答问题最重要的部分:
- 一个对象的type/class是否也是一个对象本身?
是的,根据第 1 章的规则 1:
“一切都是对象...我们定义的任何 class 都是对象,当然,那些 class 的实例也是对象。”
- class
object
和type
哪个才是真正的基地?
来自第 2 章:
“这两个对象是Python中的原始对象。我们不妨一次引入一个,但这会导致先有鸡还是先有蛋的问题——先引入哪个?这两个对象是相互依存 - 它们不能独立存在,因为它们是根据彼此定义的。"
Luciano Ramalho 在他的书“Fluent Python”中也说这种关系无法在 Python(第 21 章)中表达:
”classes对象和类型有一个独特的关系:对象是一个
类型的实例,类型是对象的子class。这种关系
是“魔法”:它不能用 Python 表示,因为 class 会
必须先存在,然后才能定义另一个。类型是的事实
自身的实例也很神奇。"
所以,对于你的问题:
- class(类型)如何成为其自身的实例?
卢西亚诺说Python也不能表达
- 是否可以说明对象与类型之间的关系class?
非常感谢在第 3 章制作此插图的作者:
根据Python Data Model,Python中的一切都是对象,每个对象都有一个身份、一个类型和一个值。
object
是所有对象的基础class,type
也是一个对象,所以它是object
的一个实例,[=10也一样=] 本身。另外 type
是所有对象类型的基础 class,因此 object
的类型是 type
,type
本身也是如此。
这是我的理解,欢迎指出错误。
我意识到它与 Java
中的 instanceKlass 和 _java_mirror 非常相似
我对 Python 中的 object
和 type
class 有点困惑 3. 也许有人可以消除我的困惑或提供一些额外的信息.
我目前的理解是,每个 class(object
除外)都继承自一个名为 object
的基 class。但是每个class(包括object
)也是class的一个实例type
,它是它自己和object
的一个实例,也继承自object
.
我的问题是:
是否有 reason/design 决定为什么
object
是type
的实例并且type
继承自object
?对象的type
/class是否也是对象本身?class (
type
) 怎么可能是它自己的实例呢?class
object
和type
哪个才是真正的基地?
我一直以为object
会是最"fundamental"class,但是好像是type
的实例,是object
的实例,也就是type
的实例,... 这个递归在哪里结束?有没有可能说明
object
和type
class之间的关系?
我尝试在 Python 标准库的文档中查找 object
和 type
的条目。
每个 class(对象除外)都继承自对象。
>>> 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
<class 'type'>
是classobject
的metaclass,每个class(包括type
)都直接或间接继承来自 object
.
如果您需要找到更多关于 metaclasses 的信息,请查看此处 https://realpython.com/python-metaclasses/
您所有问题的答案都可以在本书中找到:Python Types and Objects
更新:another link to the book。如果它也死了,请告诉我。
回答问题最重要的部分:
- 一个对象的type/class是否也是一个对象本身?
是的,根据第 1 章的规则 1:
“一切都是对象...我们定义的任何 class 都是对象,当然,那些 class 的实例也是对象。”
- class
object
和type
哪个才是真正的基地?
来自第 2 章:
“这两个对象是Python中的原始对象。我们不妨一次引入一个,但这会导致先有鸡还是先有蛋的问题——先引入哪个?这两个对象是相互依存 - 它们不能独立存在,因为它们是根据彼此定义的。"
Luciano Ramalho 在他的书“Fluent Python”中也说这种关系无法在 Python(第 21 章)中表达:
”classes对象和类型有一个独特的关系:对象是一个 类型的实例,类型是对象的子class。这种关系 是“魔法”:它不能用 Python 表示,因为 class 会 必须先存在,然后才能定义另一个。类型是的事实 自身的实例也很神奇。"
所以,对于你的问题:
- class(类型)如何成为其自身的实例?
卢西亚诺说Python也不能表达
- 是否可以说明对象与类型之间的关系class?
非常感谢在第 3 章制作此插图的作者:
根据Python Data Model,Python中的一切都是对象,每个对象都有一个身份、一个类型和一个值。
object
是所有对象的基础class,type
也是一个对象,所以它是object
的一个实例,[=10也一样=] 本身。另外 type
是所有对象类型的基础 class,因此 object
的类型是 type
,type
本身也是如此。
这是我的理解,欢迎指出错误。
我意识到它与 Java
中的 instanceKlass 和 _java_mirror 非常相似