什么是Python的类型“对象”?

时间:2014-04-21 12:07:21

标签: python

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

  

“Python程序中的所有数据都由对象表示......每个   object有一个标识,一个类型和一个值。“

没问题。但除此之外,它还没有真正描述“对象”是什么。例如,文档甚至没有涵盖这些“对象”支持点运算符 - 从我的PoV中,它们可能是内存数据结构中的某些内容,而不是id()type()之外的用户。我收集的是一些基础元对象界面,类似于文档中class instance类型对象所描述的界面。从一个例子开始:

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

x.__class__.__name__

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

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

3 个答案:

答案 0 :(得分:8)

我先回答1,2问题,然后回答第4个问题,然后回答第3个问题:

  • "类型类型"对象"之间的关系是什么?和#34;班 实例"输入对象?"
  • "我可以假设内置类型对象的~mea API与之相同 "类实例"输入对象?"

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

  • "一般来说,"对象" ..."

该对象是Python中的基础语言特性,与其他OOPL一样,支持属性和行为。所有Python对象都有一个类很像其他基于类的OOPL。 object类是Python中类层次结构的基础。因此,所有类都是object类的子类,而 all 前面提到的"对象"和object的实例 - 通过继承。

值得首先明确指出在Python(2.2及以上版本)"类型"和"班" mean the same thing(用于所有密集目的)。所以" int"和其他所谓的内置类型都是类(当然它们表示为对象)。例如,x = int(1)调用int类(对象)来构造一个int实例对象x。

可以说Python中有两种类型的对象; "类型"对象,或代表类型的对象,以及"非类型"物品 - 那些没有的东西。但是,有两种类型的整数同样如此;零,而不是零。它并不意味着什么:Python中的所有东西都是包含类的对象。由于类形成对象,因此它们都是名为" type"的类的实例。 type对象也是type的实例。请注意,您可以通过检查类对象的__bases__属性来检查类的继承层次结构。在所有情况下,它都会回到object课程 - 当然。有关详细信息,请参阅http://www.cafepy.com/article/python_types_and_objects/python_types_and_objects.html

  • " ...所有文件记录在哪里?"

嗯,这实际上是一个很好的问题。它应该在Data Modellanguage reference部分中介绍,但它有点被撇去。对象对象(有意义)的构造函数是内置的,并与其余的内置here一起记录。 Classes chapterThe Python Tutorial也覆盖了这个区域。

答案 1 :(得分:1)

有点难以理解你在问什么。

类型是类的类。像Python中的其他所有类一样,类本身就是对象,你可以传递它们,将它们分配给变量等。如果你问一个类是什么类,你将得到答案type。如果你问一个类实例它的类是什么,你当然会得到这个类。

>>> type(int)
<type 'type'>
>>> type(1)
<type 'int'>

>>> class Foo(object):
...   pass
>>> type(Foo)
<type 'type'>
>>> obj = Foo()
>>> type(obj)
<class '__main__.Foo'>

(此处功能 type(x)是执行x.__class__的另一种方式。)

答案 2 :(得分:1)

Python类型就像普通对象一样(一切都是对象)。作为一个类型或一个实例是对象的语义问题,它扮演的角色。

类型是一个对象,它包含有关如何构造某种对象以及该类对象可以执行的操作的信息。

在Python 3中,类和类型基本相同。术语“类”更常用于描述复杂类型(库或用户定义),而术语“类型”用于描述基本原语(例如整数,字符串,列表)或任何类型。

(我不知道某些内置类型是否与用户定义类型的实现方式不同;首先,有几个Python解释器可能彼此不同。重要的是概念上,内置类型和用户定义的类型没有区别。)

类型(类)的实例是使用其类型对象的信息构造的对象,其行为与其类型对象通告的方式相同。

实例对象通过__class__属性连接到它们的类型对象(尽管最好使用type()函数来获取对象的类型)。这个连接是一个普通引用,一个对象保存到另一个,它的实现没有特殊,除了解释器将使用这个引用来实现子类和反射。有时它甚至可以在运行时改变。