gpt4 book ai didi

python - Python 的类型 "objects"到底是什么?

转载 作者:太空狗 更新时间:2023-10-30 00:40:47 24 4
gpt4 key购买 nike

我刚刚开始学习 Python。我发现类型系统有点难以理解。我有很多问题,但主要是长话短说; documentation状态:

"All data in a Python program is represented by objects ... Every object has an identity, a type and a value."

没问题。但除此之外,它并没有真正描述什么是“对象”。例如,文档甚至没有涵盖这些“对象”支持点运算符——从我的 PoV 来看,它们可能是内存中的一些数据结构,除了 id() 之外不会向用户公开type() 等。但是我收集到有一些类似于 class instance 描述的底层元对象接口(interface)。在文档中键入对象。从一个例子开始:

如果我在类实例“x”上执行此操作:

x.__class__.__name__

我得到了它的类名。我明白那个。该文档描述了类实例 类型对象的__class____name__ 属性。如果我这样做 [].__class__.__name__ 我得到“列表”。同样 int(1).__class__.__name__ 给出“int”。对我来说到底发生了什么是模棱两可的,我想澄清一下。所以我的问题是:

  • 类型类型“对象”和“类实例”类型对象之间的关系是什么?
  • 我可以假设内置类型对象的 ~meta API 与“类实例”类型对象的相同吗?
  • 如果是这样,这个接口(interface)是什么,记录在哪里?
  • 一般来说,与内置类型相对应的“对象”是什么,它们是如何实现的?

最佳答案

我会先回答第 1,2 题,然后是第 4 题,然后是第 3 题:

  • “类型类型“对象”和“类”之间的关系是什么实例“类型对象?”
  • “我可以假设内置类型对象的 ~meta API 与“类实例”类型对象的那个?

它们是一样的,是的,它们共享一个通用的 API。当documentation将内置类型描述为“对象”,或将类实例描述为“对象”,或将类或其他任何内容描述为“对象”……他们谈论的是完全相同的语言结构。

  • “一般来说,什么是‘对象’……”

对象是 Python 中的一项基础语言功能,它支持与其他 OOPL 非常相似的属性和行为。所有 Python 对象也有一个类,很像其他基于类的 OOPL。 object 类是 Python 类层次结构的基础。因此,所有类都是 object 类的子类,所有上述“对象”和 object 的实例 - 通过继承。 p>

值得首先明确指出的是,在 Python(2.2 及更高版本)中,“类型”和“类”mean the same thing (出于所有意图和目的)。所以“int”和其他所谓的内置类型都是类(当然表示为对象)。例如,此 x = int(1) 调用 int 类(对象)来构造一个 int 实例对象 x。

确实可以说 Python 中有两种类型的对象; “类型”对象,或表示类型的对象,以及“非类型”对象 - 那些不代表类型的对象。但是说有两种类型的整数同样正确;零,而不是零。这并不意味着什么:Python 中的一切都是一个对象,包括类。由于类形成一个种类对象,它们都是称为“类型”的类的实例。类型对象也是类型的一个实例。请注意,您可以通过检查类对象的 _bases_ 属性来检查类的继承层次结构。在所有情况下,它都会返回到 object 类 - 当然。参见 https://www.eecg.utoronto.ca/~jzhu/csc326/readings/metaclass-class-instance.pdf有关这方面的更多详细信息。

  • “...所有记录在哪里?”

好吧,这实际上是个好问题。它应该包含在 Data Model 中节language reference , 但有点略过。 object objects 的构造函数,object(有意义)是内置的,并与其余的内置函数一起记录 here .还有 Classes chapterThe Python Tutorial也涵盖了这个领域。

关于python - Python 的类型 "objects"到底是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23197122/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com