Python 为什么“object”是“type”的实例,“type”是“object”的实例?
我对Python3中的Python 为什么“object”是“type”的实例,“type”是“object”的实例?,python,python-3.x,oop,object,metaprogramming,Python,Python 3.x,Oop,Object,Metaprogramming,我对Python3中的对象和类型类有点困惑。也许有人可以澄清我的困惑或提供一些额外的信息 我目前的理解是,每个类(除了对象)都从名为对象的基类继承。但是每个类(包括对象)也是类类型的一个实例,它是自身和对象的一个实例,也继承自对象 我的问题是: 为什么对象是类型的实例,并且类型继承自对象?对象的类型/类本身也是对象吗 类(类型)如何成为自身的实例 哪个是真正的基类对象或类型? 我一直认为对象将是最“基本”的类,但它似乎是类型的一个实例,它是对象的一个实例,它是类型的一个实例。。。 这个递归在哪
对象
和类型
类有点困惑。也许有人可以澄清我的困惑或提供一些额外的信息
我目前的理解是,每个类(除了对象
)都从名为对象
的基类继承。但是每个类(包括对象
)也是类类型
的一个实例,它是自身和对象
的一个实例,也继承自对象
我的问题是:
- 为什么
是对象
的实例,并且类型
继承自类型
?对象的对象
/类本身也是对象吗类型
- 类(
)如何成为自身的实例类型
- 哪个是真正的基类
或对象
?类型
我一直认为
将是最“基本”的类,但它似乎是对象
的一个实例,它是类型
的一个实例,它是对象
的一个实例。。。 这个递归在哪里结束类型
- 是否有可能说明
和对象
类之间的关系类型
object
和type
的条目
每个类(对象除外)都从对象继承
>对于对象、int、float、str、list、dict中的x:
... 打印(f'{x.\\\\\\\\\\\\:6}:{x.\\\\\\\\\\\\\\\\\\\\\')
...
对象:()
内部:(,)
浮动:(,)
str:(,)
名单:(,)
格言:(,)
每个类都是类类型的实例
>对于对象、int、float、str、list、dict中的x:
... 打印(f'{x.\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
...
对象:
int:
浮动:
str:
名单:
格言:
type
是其自身的一个实例
>>类型.\uuu类__
类型
也继承自对象
>>类型。\uuuu__
(,)
也
>isinstance(对象、类型)
真的
>>>isinstance(类型、对象)
真的
>>>isinstance(类型,类型)
真的
>>>isinstance(对象,对象)
真的
>>issubclass(类型、对象)
真的
>>>issubclass(对象、类型)
假的
是类对象
的元类,每个类(包括类型
)都直接或间接地从对象
继承
如果您需要了解更多有关元类的信息,请点击此处在本书中可以找到您所有问题的答案:
UPD:。如果它也死了,请告诉我
回答您的问题最重要的部分是:
- 对象的类型/类是否也必须是对象本身
是的,根据第一章的规则1:
“一切都是对象……我们定义的任何类都是对象,当然,这些类的实例也是对象。”
- 哪个是真正的基类
对象
或类型
第2章:
“这两个对象是Python中的原始对象。我们不妨一次介绍一个,但这会导致鸡和蛋的问题——首先介绍哪一个?这两个对象是相互依存的——它们不能独立存在,因为它们是根据彼此定义的。”
Luciano Ramalho在其著作《流畅的Python》中也指出,这种关系不能用Python表达(第21章):
“类对象和类型具有唯一的关系:对象是
类型的实例,而类型是object的子类。此关系
是“魔法”:它不能用Python表示,因为任何一个类都会
必须先存在,然后才能定义另一个
它本身的一个例子也是神奇的。”
那么,对于你的问题:
- 类(类型)如何成为自身的实例
Luciano说它也不能用Python来表达
- 是否有可能说明对象和类型类之间的关系
非常感谢作者在第3章中做出了这一说明:
根据Python,Python中的一切都是一个对象,每个对象都有一个标识、一个类型和一个值
对象
是所有对象的基类,类型
也是一个对象,因此它是对象
的实例,对于对象
本身也是如此。而且类型
是所有对象类型的基类,因此对象
的类型是类型
,而类型
本身也是如此
这是我的理解,欢迎指出任何错误。谢谢!这篇文章真的很有帮助。但是从我现在的理解来看:type
类不是一个“普通”元类,因为它们在实现级别上“作弊”,并且不能在纯Python中复制。遗憾的是,该图像缺少一个箭头,以反映issubclass(object,object)这一事实
是真的。@切普纳难道你没有忘记,每个类都是它自己的子类,它对于对象类不是特别的吗?但是有一个箭头强调类型有类型类型。只是想知道为什么作为object
的子类object
没有得到同样的重视。(也就是说,每个类都有一个父类;object
是唯一的类,它是它自己的父类。)Cannata的书籍链接似乎已经失效。object
不是它自己的父类,因为type
是它自己的类:object是根,它没有父类。它是自身的一个子类,就如同类C
是自身的一个子类一样<代码>C类
基础为