python:dir()函数
dir
([object])
在没有参数的情况下,返回当前本地范围内的名称列表。使用一个参数,尝试返回该对象的有效属性列表。
如果对象有一个名为__dir__()的方法,该方法将被调用,并且必须返回属性列表。这允许实现自定义__getattr__()或__getattribute__()函数的对象来定制方法dir()报告它们的属性。
如果对象不提供__dir__(),函数将尽力从对象的__dict__属性(如果定义了)和它的类型对象中收集信息。结果列表不一定是完整的,并且当对象有自定义__getattr__()时可能是不准确的。
默认的dir()机制与不同类型的对象的行为不同,因为它试图生成最相关的,而不是完整的信息:
如果对象是模块对象,则该列表包含模块属性的名称。
如果对象是类型或类对象,则该列表包含其属性的名称,并递归地包含其基的属性。
否则,该列表包含对象的属性名称、类属性的名称,以及它的类基类的属性的递归。
结果列表按字母顺序排序。
实例:
>>> import struct
>>> dir() # show the names in the module namespace
['__builtins__', '__name__', 'struct']
>>> dir(struct) # show the names in the struct module
['Struct', '__all__', '__builtins__', '__cached__', '__doc__', '__file__',
'__initializing__', '__loader__', '__name__', '__package__',
'_clearcache', 'calcsize', 'error', 'pack', 'pack_into',
'unpack', 'unpack_from']
>>> class Shape:
... def __dir__(self):
... return ['area', 'perimeter', 'location']
>>> s = Shape()
>>> dir(s)
['area', 'location', 'perimeter']
请注意,因为dir()主要是作为一个交互提示使用的方便,它试图提供一组有趣的名称,而不是试图提供严格或一致定义的名称集,并且它的详细行为可能会在不同版本之间发生变化。例如,当参数是类时,元类属性不在结果列表中。