





















在 Python 里函数和类都是对象,而且都属于“可被赋值、传递、作为参数返回”的一等对象(first-class object)。
更具体一点:
Python 设计哲学里最核心、也最容易混乱的一点:“对象(object)到底是什么?”
在 Python 里:
对象 = 运行时内存中的一个实体,它同时包含:数据 + 类型 + 行为
换成更“Python源码视角”的说法:
对象 = 带有类型信息的内存块(everything is a PyObject)
在 CPython 里,每个对象本质上都是:
typedef struct {
PyTypeObject *ob_type;
} PyObject;
也就是说:
每个对象都必须知道:它“是什么类型”
你可以这样理解:
| 概念 | 是否对象 | 本质 |
|---|---|---|
| 3 | ✅ | int对象 |
| "abc" | ✅ | str对象 |
| function | ✅ | function对象 |
| class | ✅ | type对象 |
| module | ✅ | module对象 |
| instance | ✅ | 某个class的对象 |
👉 结论:
对象不是类别,而是“运行时存在的统一结构”
因为 Python 把这些都统一成:
def f():
pass
本质是:
一个包含 code + globals + defaults 的对象
所以:
f.__code__f.__globals__f.__closure__这些都是“对象属性”
class A:
pass
本质是:
A = type("A", bases, dict)
所以:
可以用这张“心智模型”理解:
┌──────────────┐
│ type │ ← 元类(造类的)
└──────┬───────┘
↓
┌──────────────┐
│ class A │ ← 类对象(type的实例)
└──────┬───────┘
↓
┌──────────────┐
│ instance │ ← 实例对象
└──────────────┘
再加一层函数:
function object
↓
code object
↓
closure (可选)
因为 Python 里“对象”不是分类概念,而是:
统一运行时模型
换句话说:
如果你只记一句话,可以记这个:
Python 中对象 = 带类型指针的运行时结构体(PyObject),所有值、函数、类、模块都遵守这一模型
| 对象 | 类型 |
|---|---|
| 函数 | function |
| 方法(绑定后) | method |
| 类 | type |
| 类实例 | class |
| 例子 |
class A:
def f(self):
pass
a = A()
print(type(A)) # type
print(type(a)) # A
print(type(A.f)) # function(未绑定)
print(type(a.f)) # method(绑定方法)

此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。