当前位置: 首页 > news >正文

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),所有值、函数、类、模块都遵守这一模型

http://www.jsqmd.com/news/684753/

相关文章:

  • VS2022新手避坑:手把手教你搞定EasyX的graphics.h头文件缺失问题
  • 内存上下文恢复技术:提升系统性能的关键突破
  • 终极指南:3步搞定Mac微信防撤回,永久保存重要聊天记录
  • TVA技术在医药行业视觉检测的最新进展(一)
  • WindTerm 高效配置与进阶场景实战指南【图解】
  • 终极指南:如何用League Director免费制作专业级《英雄联盟》录像
  • AixProbe开源AI远程调试器:第1章 硬件讲解
  • 2026年国内水泥栏杆优质厂家TOP5盘点 附地址信息 - 优质品牌商家
  • 算法时代的坐骑:在亚马逊,为何“选对赛道”远胜于“埋头苦干”
  • 量子计算中的ZX演算与图态编译优化技术
  • 保姆级避坑指南:在Ubuntu 18.04上搞定ORB-SLAM2稠密点云与D435i的完整配置流程
  • 别再一关了之!深入理解Docker Swarm端口与防火墙配置(附firewalld/iptables双方案)
  • 求职者花 2.8 万元介绍费当高铁安检员,月薪仅 1750 元,为什么这种付费上班的坑,总有人往里跳?
  • golang如何调用Jira API_golang Jira API调用技巧
  • RT-Thread Vision开发板评测:Cortex-M85与OpenMV的嵌入式视觉实践
  • 铁岭生态休闲研学基地圆吉祥?小程序开源代码
  • 2026膜分离实验设备选型指南:电渗析装置,纳滤膜设备,纳滤膜过滤装置,膜测试设备,膜浓缩设备,优选推荐! - 优质品牌商家
  • 485AI语音识别模块:打字免编程,多设备串口直连控制
  • Golang怎么实现依赖漏洞扫描_Golang如何用govulncheck检查依赖的已知安全漏洞【指南】
  • Navicat 16 实战:5分钟搞定MySQL用户权限精细化管理(从创建到回收)
  • 无线充电设计避坑指南:TDK_PC47铁氧体在永磁体作用下的参数设置技巧
  • 机器学习特征重要性计算全解析与实践指南
  • 2025届最火的六大降AI率工具解析与推荐
  • 自助服务转型:人机协同的未来商业服务模式
  • 基于深度学习的《权游》龙族图像分类器实战
  • Stable Diffusion入门指南:从环境搭建到AI绘画实战
  • SMUDebugTool终极指南:解锁AMD Ryzen处理器的硬件调试与性能优化
  • 1×1卷积:深度学习模型优化的瑞士军刀
  • 告别传统角点检测:用YOLOv5搞定复杂场景下的二维码识别(附数据集生成脚本)
  • PyTorch实现线性回归:从基础到实战