【发布时间】:2021-04-15 18:51:51
【问题描述】:
我对 Python 3 中的 object 和 type 类有点困惑。也许有人可以解决我的困惑或提供一些额外的信息。
我目前的理解是每个类(object 除外)都继承自一个名为 object 的基类。但是每个类(包括object)也是类type的一个实例,它是它自己和object的一个实例,也继承自object。
我的问题是:
为什么
object是type的实例并且type继承自object,是否有原因/设计决策?对象的type/class 本身是否也是对象?一个类 (
type) 如何成为它自己的一个实例?哪个是真正的基类
object或type?
我一直以为object会是最“基础”的类,但它似乎是type的一个实例,它是object的一个实例,它是type的一个实例,... 这个递归在哪里结束?有没有可能说明
object和type类之间的关系?
我尝试在 Python 标准库的文档中查找 object 和 type 的条目。
每个类(对象除外)都继承自对象。
>>> 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'>,)
每个类都是类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 python-3.x oop object metaprogramming