在 Python 中,诸如 int、str、list、dict 这样的'内置类型',通常被初学者视为语言层面预先定义的特殊数据结构。然而,从 Python 对象模型的角度看,这些内置类型并非独立于类的特殊构件,而是由解释器提供的类对象。
这一事实并非实现细节,而是 Python 对象体系统一性的直接体现。理解'内置类型也是类对象',是从'使用类型'迈向'理解类型机制'的关键一步,它揭示了 Python 的对象模型对内置与自定义类型的一致性设计。
一、内置类型的对象身份
在 Python 中,int、str、list 等名称并不指向某种'原始类型',而是直接绑定到类对象。
print(isinstance(int, object)) # True
print(isinstance(int, type)) # True
这表明:
- int 本身是一个对象
- 其类型是 type
- 它在对象模型中与用户自定义类处于同一层级
因此,可以得出一个重要结论:
Python 并不存在'非对象的类型';所有的类型自身都是对象。
二、内置类型与用户自定义类的统一性
从语义层面看,内置类型与用户自定义类之间并不存在本质差异。
class MyInt:
pass
print(type(MyInt)) # <class 'type'>
print(type(int)) # <class 'type'>
它们的共同点在于:
- 都由元类 type 创建
- 都可以被调用以生成实例
- 都具有属性字典(存储数据和函数对象),实例访问时可生成绑定方法
- 都参与统一的属性查找与方法绑定机制
差异仅在于实现来源:
- 内置类型由解释器实现(通常为 C 语言)
- 用户自定义类由 Python 代码定义
但在语言语义与运行时行为层面,这种差异并不构成模型上的不一致。
三、调用内置类型:类的实例化行为
当我们编写如下代码时:
x = int("123")
从对象模型的角度看,其语义并不是执行某种特殊转换指令,而是调用类对象 int,由其构造并返回一个实例对象。
这一行为与用户自定义类的调用语义完全一致:
class Contact:
def ():
.name = name
c = Contact()

