python的dir()函数,主要用来显示各类对象的属性名称,交互式的python使用是其主要的应用场景。本文尽力多介绍一些dir()函数的功能细节。
当dir()函数没有参数时,返回的时当前namespace中的名字List,如果有参数(对象,废话,python中一切都是对象),就尝试返回对象的所有属性名称。注意,这里时尝试,有可能返回的结果并不准确,比如当__getattr()__被重写的化。
针对不同的对象,dir()函数的机制稍有不同:
如果是模块对象,返回模块所有属性的名称;
如果是类型对象,返回类型对象的所有属性的名称,包含所有此类型基类的属性名称;
如果一般实例对象(非以上两类),返回所有实例属性的名称,实例对应的类名称,以及类的基类的属性名称;
基本上,只要是可以访问的属性,就会尽力都包含在dir()函数返回的List中。
>>> dir()
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'a', 'testdict', 'tt']
>>>
>>> dir(a)
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
>>>
>>> dir(testdict)
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'cls']
>>>
>>> dir(tt)
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'cls', 'value']
一般在代码中,貌似很难用到dir()函数,反正我还从没有这样用过。
-- EOF --