十二、对象和类型

CPython 自带了一系列基本类型,例如字符串、列表、元组、字典和对象。

所有这些类型都是内置的。你不需要导入任何库,甚至不需要从标准库中导入。

例如,要创建一个新的列表,你可以调用:

lst = list()

或者,你可以使用方括号:

lst = []

字符串可以使用双引号或单引号从一个字符串字面量(string literal)实例化。在 “Python 语言和语法” 章节中,你探索了一些语法定义,它们让编译器把双引号解释为一个字符串字面量。

Python 中的所有类型都继承自一个内置的基类型 object。即便是字符串、元组和列表也都继承自 object

object 类型的基本实现在 Object/object.c 中,它是用纯 C 实现的。还有一些基本逻辑的具体实现,比如浅层比较(shallow comparisons)。

你可以将 Python 对象视为由两个部分组成:

  1. 核心数据模型,包括指向已编译函数的指针

  2. 一个带有任意自定义属性和方法的字典

许多基本的对象 API 在 Objects/object.c 中声明,比如内置函数 repr() 的实现,PyObject_Repr。在文件中你还可以找到 PyObject_Hash() 和其他 API。

通过在 Python 对象上实现 双下划线(dunder methods)方法,所有这类函数都可以在自定义对象中被重写:

class MyObject(object):
    def __init__(self, id, name):
        self.id = id
        self.name = name
    def __repr__(self):
        return "<{0} id={1}>".format(self.name, self.id)

所有的这些内置函数被称之为 Python 数据模型。并不是说一个 Python 对象中的所有方法都是数据模型的一部分,这种数据模型使得 Python 对象可以包含类或实例属性以及方法。

参见

Luciano Ramalho 的《Fluent Python, 2nd Edition》是了解 Python 数据模型的极佳资源。

Last updated