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()输出顺序可能会有差异,因此不要依赖输出的顺序做逻辑判断。