python里对象(object)到底是什么

在 Python 里函数和类都是对象,而且都属于“可被赋值、传递、作为参数返回”的一等对象(first-class object)。

更具体一点:

  • 函数对象:function
  • 类对象:type(类本身是 type 的实例)
  • 实例对象:class 创建出来的对象

Python 设计哲学里最核心、也最容易混乱的一点:“对象(object)到底是什么?”


一、最核心的一句话定义

在 Python 里:

对象 = 运行时内存中的一个实体,它同时包含:数据 + 类型 + 行为

换成更“Python源码视角”的说法:

对象 = 带有类型信息的内存块(everything is a PyObject)


二、Python 官方级别的本质定义(非常重要)

在 CPython 里,每个对象本质上都是:

typedef struct {
    PyTypeObject *ob_type;
} PyObject;

也就是说:

每个对象都必须知道:它“是什么类型”


三、所以“对象”不是“东西”,而是“统一接口的实体”

你可以这样理解:

概念 是否对象 本质
3 int对象
"abc" str对象
function function对象
class type对象
module module对象
instance 某个class的对象

👉 结论:

对象不是类别,而是“运行时存在的统一结构”


四、困惑的关键点:函数/类为什么也是对象?

因为 Python 把这些都统一成:

1. 函数 = function object

def f():
    pass

本质是:

一个包含 code + globals + defaults 的对象

所以:

  • f.__code__
  • f.__globals__
  • f.__closure__

这些都是“对象属性”


2. 类 = type 的实例

class A:
    pass

本质是:

A = type("A", bases, dict)

所以:

  • 类不是“模板”
  • 类是“type 创建出来的对象”

五、最容易混淆的三层结构(关键!)

可以用这张“心智模型”理解:

        ┌──────────────┐
        │   type       │   ← 元类(造类的)
        └──────┬───────┘
               ↓
        ┌──────────────┐
        │   class A    │   ← 类对象(type的实例)
        └──────┬───────┘
               ↓
        ┌──────────────┐
        │   instance   │   ← 实例对象
        └──────────────┘

再加一层函数:

function object
   ↓
code object
   ↓
closure (可选)

六、为什么你会觉得“对象”很模糊?

因为 Python 里“对象”不是分类概念,而是:

统一运行时模型

换句话说:

  • Java:类 vs 基本类型(分裂)
  • C++:对象 vs 函数 vs 类型(分裂)
  • Python:全部统一成 object

七、给你一个“彻底统一的定义”(最重要)

如果你只记一句话,可以记这个:

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(绑定方法)

adeefda9-1385-4b17-92d4-af131a57dedf

posted @ 2026-04-23 01:13  悠哉大斌  阅读(35)  评论(0)    收藏  举报