列出所有類成員
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()
主要是為了方便在互動式提示中使用而提供的,所以它嘗試提供一組有趣的名稱,而不是嘗試提供嚴格或一致定義的名稱集,並且其詳細行為可能會發生變化版本。例如,當引數是類時,元類屬性不在結果列表中。