Python 高级编程 021:__dict__与dir()的深度解析
Python 高级编程 021__dict__与dir的深度解析Bilibili 同步视频一、先搭舞台一个简单的继承示例二、__dict__对象属性的 “存储字典”1. 底层核心高性能的内置数据结构2. 实例的 __dict__只存自身实例属性3. 类的 __dict__包含完整类信息4. 动态操控直接修改 __dict__ 增删属性三、dir()对象全貌的 “属性清单”1. 核心用法一键获取全量属性2. dir() 与 __dict__ 的关键区别3. 兼容无 __dict__ 的内置对象四、总结用好自省吃透 Python 对象在 Python 面向对象的世界里自省Introspection是一项极具魅力的核心能力 —— 它让我们能在程序运行时主动探查对象的类型、属性、方法与内部结构就像拥有一双 “透视眼”穿透封装看清对象的本质。今天我们就聚焦 Python 自省最常用的两大神兵__dict__**** 属性与dir()** 内置函数**从继承案例入手彻底搞懂它们的用法、区别与底层逻辑✨。Bilibili 同步视频Python 高级编程 021__dict__与dir()的深度解析一、先搭舞台一个简单的继承示例为了清晰演示自省机制我们先定义一组具有继承关系的类这是后续所有操作的基础# 定义父类 PersonclassPerson:人基础父类nameuser# 类属性# 定义子类 Student继承自 PersonclassStudent(Person):学生继承 Person扩展自有属性def__init__(self):self.school_name慕课网# 实例属性# 实例化 Student 对象userStudent()这里的层级关系很清晰Student→ 继承Person→ 实例化为userPerson的类属性name与Student的实例属性school_name共同构成了对象的属性体系。二、__dict__对象属性的 “存储字典”1. 底层核心高性能的内置数据结构在CPython 编译器中__dict__是纯 C 语言实现的字典经过了极致优化是 Python 性能最高的数据结构之一。Python 类与实例的所有属性本质上都通过__dict__来存储和管理 —— 它就是对象属性的 “专属账本”。2. 实例的__dict__只存自身实例属性直接打印实例user的__dict__我们会发现print(user.__dict__)# 输出{school_name: 慕课网}它只包含实例自身初始化的属性并没有父类Person的name属性但神奇的是直接访问user.name依然能得到结果print(user.name)# 输出user这是 Python 的MRO方法解析顺序在起作用访问属性时Python 会沿继承链向上查找name是父类Person的类属性不属于子类实例因此不会出现在实例的__dict__中。3. 类的__dict__包含完整类信息类本身也是对象它的__dict__远比实例丰富包含模块、类名、文档、弱引用、类属性等全部信息print(Person.__dict__)输出会包含__module__所属模块、name类属性、__doc__类文档、__dict__自身引用、__weakref__弱引用等完整元信息。4. 动态操控直接修改__dict__增删属性__dict__不仅能查看还能直接读写实现对象属性的动态操控# 动态添加实例属性user.__dict__[school_addr]北京市# 直接访问新属性print(user.school_addr)# 输出北京市这就是__dict__的强大之处 —— 直接操作对象的属性存储字典灵活掌控对象状态。三、dir()对象全貌的 “属性清单”如果说__dict__是属性账本那dir()就是全量目录。dir()是 Python 内置的自省函数功能比__dict__更强大能列出对象所有可用属性与方法含继承的、内置的魔法方法。1. 核心用法一键获取全量属性# 查看 Student 实例的所有属性print(dir(user))执行后会输出一长串列表不仅有school_name、name还有 Python 内置的__init__、__str__、__class__等魔法方法覆盖对象的全部可用成员。2.dir()与__dict__的关键区别特性__dict__dir()内容仅对象自身存储的属性 对应值对象所有可用属性 / 方法名含继承、内置格式字典键值对列表仅名称适用场景查看 / 修改自有属性、动态操控快速探查对象全貌、确认支持的方法3. 兼容无__dict__的内置对象很多 Python 内置类型如list、str没有 ****__dict__直接访问会抛异常但dir()依然能完美工作a[1,2,3]# print(a.__dict__) # 报错AttributeErrorprint(dir(a))# 正常输出 list 的所有方法与属性这让dir()成为探查所有 Python 对象的通用工具尤其适合查看内置类型实现的魔法函数。四、总结用好自省吃透 Python 对象自省是什么运行时探查对象内部结构的能力是 Python 动态语言的核心特性__dict__C 语言实现的高性能属性字典存自身属性 值支持动态操控类与实例都有dir()全量属性清单列所有可用成员无值、兼容所有对象适合快速探查属性查找实例无属性时Python 会通过 MRO 沿继承链向上查找父类属性不属于实例本身。掌握__dict__与dir()就等于掌握了 Python 对象的透视密码无论是调试、源码阅读还是动态编程都能事半功倍。下一节我们将继续探索 Python 面向对象的另一核心super()**** 函数彻底理清继承中的方法调用逻辑

相关新闻

【测试方案_MDIO】快速掌握以太网PHY MDIO测试

【测试方案_MDIO】快速掌握以太网PHY MDIO测试

目录 1. MDIO概述 2. MDIO工作原理 2.1. MDIO引脚定义 2.2. MDIO协议 2.2.1. MDIO读写区分 2.2.2. MDIO帧结构 2.2.2.1. Clause-22帧结构 2.2.2.2. Clause-45帧结构 2.2.3. MDIO读写时序 2.2.3.1. 写操作时序(WRITE OP=01) 2.2.3.2. 读操作时序(READ OP=10) 2.2.…

2026/6/24 5:23:01阅读更多 →
基于U2-Net与深度度量学习的自动化花粉显微图像分析系统实践

基于U2-Net与深度度量学习的自动化花粉显微图像分析系统实践

1. 项目概述与核心价值最近在做一个挺有意思的项目,核心目标是想办法让计算机能自动识别和统计显微镜下的花粉。这听起来好像是个小众需求,但其实在植物学、农业、环境监测甚至法医鉴定领域,这都是个让人头疼的体力活。想象一下,研…

2026/6/24 5:18:01阅读更多 →
立体视觉与深度学习融合:无人机如何智能识别与定位待修剪树枝

立体视觉与深度学习融合:无人机如何智能识别与定位待修剪树枝

1. 项目概述:当无人机“看懂”了树在林业管理,尤其是像辐射松这类经济价值高、需要精细化养护的树种作业中,人工巡检和修剪一直是个老大难问题。林区地形复杂、树木高大,工人爬上爬下不仅效率低下,安全风险也高。更头疼…

2026/6/24 5:18:01阅读更多 →
UDS-C与ISO 14229:一文读懂汽车统一诊断服务的实现原理 [特殊字符][特殊字符]

UDS-C与ISO 14229:一文读懂汽车统一诊断服务的实现原理 [特殊字符][特殊字符]

UDS-C与ISO 14229:一文读懂汽车统一诊断服务的实现原理 🚗🔧 【免费下载链接】uds-c Unified Diagnostics Service (UDS) and OBD-II (On Board Diagnostics for Vehicles) C Library 项目地址: https://gitcode.com/gh_mirrors/ud/uds-c …

2026/6/24 6:38:05阅读更多 →
《学习C++》基本概念之标识符

《学习C++》基本概念之标识符

标识符(identifier)是C++基本词法单元(即词元token)之一,由字母(letter)、数字(digit)、下划线(underscore)组成,但是首字符必须为字母或下换线。 标识符的用途主要有两种:在声明中和在表达式中 用于声明中的标识符 声明(declaration)中的标识符用于为实体进行…

2026/6/24 6:38:05阅读更多 →
【信息科学与工程学】计算机科学与自动化——第三篇 计算理论基础05 计算数论01

【信息科学与工程学】计算机科学与自动化——第三篇 计算理论基础05 计算数论01

计算数论算法全览 算法名称 算法的思想 理论依据 算法的数学表达式/定义 算法的计算公式/定义 算法特性 时间复杂度 空间复杂度 适用类型 优点 缺点 应用场景 欧几里得算法 通过辗转相除,利用余数逐步缩小问题规模 基于等式gcd(a,b)=gcd(b,a mod b)的递归关系 …

2026/6/24 6:38:05阅读更多 →
Open3D (C++) 三维轨迹点的等间距三次样条平滑与插值(间距可控)

Open3D (C++) 三维轨迹点的等间距三次样条平滑与插值(间距可控)

系数计算的数学原理 三次样条曲线的参数方程可以表示为: S(t)=a+b(t−ti)+c(t−ti)2+d(t−ti)3S(t) = a + b(t-t_i) + c(t-t_i)^2 + d(t-t_i)^3S(t)=

2026/6/24 6:38:05阅读更多 →
002 使用单片机实现的逻辑分析仪——扩展篇

002 使用单片机实现的逻辑分析仪——扩展篇

01 使用STM32F407VET6完成逻辑分析仪基本功能 1.时间测量: 测量操作的时间 读 GPIO 操作 100次654ns,一次6.54ns 读写 buffer 读:643ns,一次6.43ns 写:642ns,一次6.42ns NOP 指令:618ns…

2026/6/24 6:38:05阅读更多 →
极致性能数据处理完全指南:5个技巧优化Polars大数据分析

极致性能数据处理完全指南:5个技巧优化Polars大数据分析

极致性能数据处理完全指南:5个技巧优化Polars大数据分析 【免费下载链接】polars Extremely fast Query Engine for DataFrames, written in Rust 项目地址: https://gitcode.com/GitHub_Trending/po/polars Polars作为基于Rust开发的高性能DataFrame查询引擎…

2026/6/24 6:33:04阅读更多 →
【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体 一文搞定到底什么是智能体【人工智能】一文搞定到底什么是智能体一. LM,WorkFlow,Agent分别有什么么不同二. Agent的思考过程是怎样的三. Agent的五个核心部分1)LLM2)Prompt3)Me…

2026/6/23 7:04:52阅读更多 →
嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

1. 嵌入式GUI控件:从原理到实战的深度解析在嵌入式系统开发中,图形用户界面(GUI)的设计与实现往往是项目从“能用”到“好用”的关键一跃。不同于资源充沛的PC或移动平台,嵌入式设备的GUI需要在有限的CPU性能、内存空间…

2026/6/24 2:12:09阅读更多 →
Google AI Studio 300美元额度的真相与实战指南

Google AI Studio 300美元额度的真相与实战指南

1. 这300美金不是“送钱”,而是Google埋下的第一道技术门槛 你看到标题里那个醒目的“$300美金”时,第一反应可能是:又一个免费额度?领完就完事?我亲手试过——这300美金根本不是红包,而是一张入场券&…

2026/6/23 5:55:37阅读更多 →
TaskJuggler脚本编程入门:用代码实现自动化项目管理

TaskJuggler脚本编程入门:用代码实现自动化项目管理

TaskJuggler脚本编程入门:用代码实现自动化项目管理 【免费下载链接】TaskJuggler TaskJuggler - Project Management beyond Gantt chart drawing 项目地址: https://gitcode.com/gh_mirrors/ta/TaskJuggler TaskJuggler是一款强大的开源项目管理工具&#…

2026/6/24 0:02:41阅读更多 →
终极教程:使用angular-mobile-nav实现流畅的移动页面过渡效果

终极教程:使用angular-mobile-nav实现流畅的移动页面过渡效果

终极教程:使用angular-mobile-nav实现流畅的移动页面过渡效果 【免费下载链接】angular-mobile-nav An angular navigation service for mobile applications 项目地址: https://gitcode.com/gh_mirrors/an/angular-mobile-nav angular-mobile-nav是一款专为…

2026/6/24 0:02:41阅读更多 →
Wan2.1-Fun-V1.1-1.3B-InP Web UI使用教程:无需代码的AI视频创作

Wan2.1-Fun-V1.1-1.3B-InP Web UI使用教程:无需代码的AI视频创作

Wan2.1-Fun-V1.1-1.3B-InP Web UI使用教程:无需代码的AI视频创作 【免费下载链接】Wan2.1-Fun-V1.1-1.3B-InP 项目地址: https://ai.gitcode.com/hf_mirrors/PAI/Wan2.1-Fun-V1.1-1.3B-InP Wan2.1-Fun-V1.1-1.3B-InP是一款强大的AI视频创作工具,…

2026/6/24 0:02:41阅读更多 →