dir()
属性名を取得します。引数が有りの場合は、引数に指定したオブジェクトの属性を取得します。
引数がない場合は、現在のローカルスコープにある名前のリストを返します。
オブジェクトが dir() という名のメソッドを持つ場合は、そのメソッドが呼び出され、属性のリストを返す必要があります。
このことにより、カスタムのgetattr()や、getattribute()関数を実装するオブジェクトは、dir()が属性を報告の仕方をカスタマイズできます。
デフォルトの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']
使用例
print(dir())
# 実行結果
['__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__']
a = 10
l = []
print(dir())
# 実行結果
['__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'a', 'l']
print(dir(tuple))
# 実行結果 ['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'count', 'index']