Python dir() 输出内容的真实含义是什么

来源:站长源码作者:小师妹头衔:草根站长
导读:本期聚焦于小伙伴创作的《Python dir() 输出内容的真实含义是什么》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《Python dir() 输出内容的真实含义是什么》有用,将其分享出去将是对创作者最好的鼓励。

Python中的dir()是内置函数,用于返回指定对象的所有属性和方法名称的列表,理解其输出内容的真实含义,能帮助开发者快速掌握对象的可用接口,提升开发效率。

Python dir() 输出内容的真实含义是什么

dir()函数的基本用法

dir()函数可以不带参数调用,也可以传入一个对象作为参数。不带参数时,它会返回当前本地作用域中的所有名称;传入对象时,返回该对象的所有属性和方法名称。

基础的调用示例如下:

# 不带参数调用dir()
print(dir())

# 传入整数对象调用dir()
num = 10
print(dir(num))

# 传入自定义类对象调用dir()
class Test:
    def __init__(self):
        self.name = "test"
    def func(self):
        pass
obj = Test()
print(dir(obj))

dir()输出内容的组成逻辑

dir()的输出结果并不是随意生成的,它遵循明确的组成规则:

  • 首先会返回对象的实例属性,也就是对象自身定义的属性,比如上面示例中Test类实例的name属性。
  • 其次是对象所属类及其父类中定义的所有方法和类属性。
  • 最后是对象支持的特殊方法,也就是以双下划线开头和结尾的属性,比如__init__、__str__等。

不同对象调用dir()的输出差异

不同类型的对象调用dir()时,输出内容会有明显差异,常见的差异如下:

对象类型输出内容特点
内置类型对象(如int、str、list)包含该类型所有内置方法,比如str对象的upper、lower等方法
自定义类对象包含类定义的属性和方法,以及父类继承的属性和方法
模块对象包含模块中定义的所有函数、类、变量等名称

特殊属性与普通属性的区别

dir()输出中经常会出现以单下划线或双下划线开头的属性,它们的含义不同:

  • 双下划线开头和结尾的属性:是Python的特殊方法或特殊属性,比如__dict__用于存储对象的属性字典,__class__用于查看对象的所属类,这些是Python对象机制的一部分。
  • 单下划线开头的属性:通常是约定为内部使用的属性,虽然外部仍然可以访问,但建议不要直接在外部调用。
  • 普通属性:是对象公开的可用接口,比如自定义类中的普通方法、实例属性等。

自定义对象的dir()输出示例

我们可以通过自定义类来更清晰地观察dir()的输出内容:

class Person:
    def __init__(self, age):
        self.age = age  # 实例属性
    def get_age(self):  # 普通方法
        return self.age
    def _inner_func(self):  # 单下划线开头的方法
        pass

p = Person(20)
print(dir(p))

上面的输出中,会包含age、get_age、_inner_func这些自定义内容,同时也会包含Person类继承自object类的所有特殊方法,比如__init__、__str__等。

dir()的使用注意事项

需要注意,dir()返回的只是属性的名称列表,并不是属性本身,如果需要查看属性的具体内容,还需要结合getattr()函数使用:

p = Person(20)
attr_list = dir(p)
# 查看age属性的具体内容
print(getattr(p, "age"))  # 输出20

另外,dir()的输出顺序并不固定,不同Python版本或者不同运行环境下,同一对象的dir()输出顺序可能会有差异,因此不要依赖输出的顺序做逻辑判断。

Pythondir()内置函数对象属性命名空间修改时间:2026-06-20 06:06:22

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。