列出所有类成员

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() 主要是为了方便在交互式提示中使用而提供的,所以它尝试提供一组有趣的名称,而不是尝试提供严格或一致定义的名称集,并且其详细行为可能会发生变化版本。例如,当参数是类时,元类属性不在结果列表中。