dir (obj) 与dir()

发布时间:2026/11/5 2:18:05

dir (obj) 与dir() 用大白话 代码例子给你讲透先给核心结论这两句话是在说dir(obj)是 Python 内置的「固定规则工具」__dir__()是类里「开发者自定义的钩子」两者的返回结果永远做不到 100% 完全一样而__dir__()返回什么完全由你写的类代码决定没有固定规则。一、先讲第一句「dir (obj) 永远不会和dir() 100% 完全相同」这里的「永远不会 100% 相同」不是指元素内容不一样而是指返回结果的顺序、类型、细节处理永远存在差异核心原因是dir(obj)是 Python 内置的上层封装函数它有自己固定的处理逻辑不管__dir__()返回什么dir()都会做额外的标准化处理导致两者结果不可能完全一致。具体差异体现在 3 个方面1. 顺序永远不同哪怕两者的元素内容完全一样dir()也会做统一排序而__dir__()按类内部的实现顺序返回顺序永远不一样。pythonclass MyClass: def __init__(self): self.name test self.age 18 def __dir__(self): return [name, age] # 自定义顺序 obj MyClass() print(dir(obj)) # 输出[age, name] dir做了排序 print(obj.__dir__()) # 输出[name, age] 按你写的顺序返回2. 类型可能完全不同__dir__()可以返回任何可迭代类型生成器、元组等而dir()永远会把结果转换成标准化的列表类型载体类型完全不同。pythonclass MyClass: def __dir__(self): yield name # 返回生成器 yield age obj MyClass() print(type(obj.__dir__())) # 输出class generator print(type(dir(obj))) # 输出class list3. 细节处理不同dir()会做额外的标准化处理比如去重、过滤极端内部属性而__dir__()返回的是原始内容不会做任何处理。 比如你让__dir__()返回重复元素dir()会自动去重结果就完全不一样了pythonclass MyClass: def __dir__(self): return [name, age, name] # 重复元素 obj MyClass() print(dir(obj)) # 输出[age, name] 自动去重 print(obj.__dir__()) # 输出[name, age, name] 保留原始重复二、再讲第二句「dir() 的返回结果完全由类的实现决定」这句话的意思是__dir__()是类里的魔法方法你在类里怎么写这个方法它就返回什么内容没有任何固定的返回规则完全由开发者自己决定。举几个极端例子你就懂了你可以让__dir__()只返回你指定的 2 个属性不管类里有多少属性pythonclass MyClass: def __init__(self): self.name test self.age 18 self.gender 男 # 这个属性故意不返回 def __dir__(self): return [name, age] # 只返回这两个 obj MyClass() print(obj.__dir__()) # 输出[name, age]你甚至可以让__dir__()返回和类属性完全无关的内容pythonclass MyClass: def __dir__(self): return [我是自定义的, 完全不管类里有什么] obj MyClass() print(obj.__dir__()) # 输出[我是自定义的, 完全不管类里有什么]你可以让__dir__()返回任何类型的可迭代对象pythonclass MyClass: def __dir__(self): return (name, age) # 返回元组 obj MyClass() print(obj.__dir__()) # 输出(name, age)三、最终总结dir(obj)是「固定规则的工具」不管你__dir__()返回什么它都会按自己的逻辑做排序、类型转换、去重等处理所以永远不会和__dir__()的原始结果 100% 完全相同__dir__()是「开发者自定义的钩子」返回什么内容、什么类型、什么顺序完全由你在类里的代码实现决定没有固定规则。
延伸阅读

更多相关文章

2026/11/2 1:11:12

告别AI瞎写代码!18万Star开源Skills仓库,8大核心技能干货详解

文章目录一、GitHub现在有多离谱?纯文本仓库半年干到18万收藏1.1 跟普通写CLAUDE.md提示词根本不是一个东西二、30秒一键安装,小白也能直接上手2.1 必开初始化技能,一键适配你的项目三、八大王牌技能,每一个都能解决程序员痛点3.1…

2026/11/4 4:29:17

威胁狩猎实战:如何在茫茫日志中找到那只“隐蔽的熊“

"如果你等到告警才行动,你已经慢了。"——威胁狩猎的核心,不是更快地响应告警,而是在告警产生之前,就发现攻击者的踪迹。前言传统安全防御是"被动响应"的:攻击者入侵 → 触发告警 → 安全团队响应…

2026/11/5 2:17:36

Python自动化测试实战:从Pytest框架到持续集成

1. 为什么需要掌握Python自动化测试?在软件研发领域,测试环节往往占据整个开发周期的40%以上工作量。传统手工测试不仅效率低下,还存在用例执行不一致、回归成本高等痛点。我曾在某电商平台项目中,亲眼见证团队用Python脚本将重复…

2026/11/5 2:17:36

ArcGIS多源数据批量编号工具:shp/gdb/mdb通用解决方案

简介:这是一款专为ArcGIS用户设计的数据自动编号工具,面向GIS工程师、测绘人员及土地管理从业者,解决宗地界址线、界址点等矢量要素在MDB、GDB和SHP格式中批量赋予唯一编号的效率难题。资源包共37个文件,含16个核心DLL动态库&…

2026/11/5 2:17:36

高德空间智能开发者大赛:HarmonyOS与空间计算的技术融合

1. 初识高德空间智能开发者大赛推开北京国家会议中心厚重的玻璃门,一股混合着电子设备与咖啡香气的特殊气息扑面而来。作为从业八年的移动开发工程师,我参加过不少技术大会,但高德空间智能开发者大赛的现场氛围还是让我眼前一亮。入口处巨大的…

2026/11/5 2:17:36

C# ECharts模型库:解决序列化乱码与运行时崩溃问题

简介:这是一套专为C# MVC开发者设计的ECharts模型层建模库,解决.NET后端与前端图表库深度集成难题,显著降低数据可视化开发门槛。资源共369个文件,涵盖110个核心C#模型类(如图表配置、坐标轴、系列项等)、8…

2026/11/5 2:17:36

企业知识库搭建指南:架构、工具与实战

1. 知识库搭建的核心价值与场景解析十年前我刚入行时,第一次听说"知识库"这个概念还以为是图书馆的数字版本。直到参与企业级文档管理系统建设才明白,真正的知识库是能让你在3秒内找到三年前某个项目的技术方案,在会议前5分钟快速调…

2026/11/5 2:12:35

住房证明PDF结构化抽取:坐标锚点、批量入库与原件校验

简介:这份PDF为东莞市不动产登记权利人查询结果样张,面向需要了解住房证明开具格式、核验方式及登记查询口径的读者,可用于办理购房、贷款、户籍或材料审核前的流程熟悉与字段核对。资源包共1个PDF文件,约256KB,完整呈…

2026/11/4 12:38:23

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/4 21:04:25

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/5 0:02:07

多智能体协作系统架构设计与实践优化

1. 多智能体协作系统的时代背景2017年Transformer架构的诞生彻底改变了人工智能的发展轨迹。当行业还沉浸在单一大模型带来的性能突破时,Anthropic的研究团队已经将目光投向了更前沿的领域——如何让多个智能体通过协作产生超越单体能力的系统智能。这就像交响乐团中…

2026/11/5 0:02:07

大模型系统性入门实战指南:从原理到部署微调的全链路路线

提到大模型的系统性入门,我先说个结论:这事真不难,难的是资料太散、路线太多,今天这个框架明天那个工具,新人很容易在“收藏夹吃灰”和“教程看到一半放弃”之间反复横跳。市面上关于大模型的内容少说有几十万篇&#…

2026/11/5 0:02:07

鸿蒙文件系统沙箱机制解析与开发实践

1. 鸿蒙文件系统沙箱机制深度解析作为一名从Android转向鸿蒙开发的工程师,我深刻体会到文件系统访问是迁移过程中最先遇到的"拦路虎"。在Android上运行良好的文件读写代码,在鸿蒙真机环境却频频出现文件写入后神秘消失或直接抛出权限拒绝错误的…

2026/11/4 12:38:23

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/4 21:04:25

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑