列出所有类成员
dir()
函数可用于获取类成员的列表:
dir(Class)
例如:
>>> dir(list)
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__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']
通常只查看非魔法成员。这可以使用简单的理解来完成,该理解列出名称不以 __
开头的成员:
>>> [m for m in dir(list) if not m.startswith('__')]
['append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
注意事项:
类可以定义 __dir__()
方法。如果存在该方法,则调用 dir()
将调用 __dir__()
,否则 Python 将尝试创建该类的成员列表。这意味着 dir 函数可能会产生意外结果。来自官方 python 文档的两个重要引用 :
如果对象没有提供 dir (),则该函数会尽力从对象的 dict 属性(如果已定义)和其类型对象中收集信息。结果列表不一定完整,并且当对象具有自定义 getattr () 时可能不准确。
注意: 因为
dir()
主要是为了方便在交互式提示中使用而提供的,所以它尝试提供一组有趣的名称,而不是尝试提供严格或一致定义的名称集,并且其详细行为可能会发生变化版本。例如,当参数是类时,元类属性不在结果列表中。