1. はじめに
Pythonを学び始めた方がつまずきやすいのが「オブジェクトの中に何があるか分からない」という場面です。そんなときに便利なのが、dir()関数
です。
本記事では、Python|dir()関数の使い方について、基本的な使い方から応用例、注意点まで丁寧に解説します。
dir()
関数を使うことで、オブジェクトが持っている属性やメソッドを簡単に一覧表示することができます。これは、Pythonのリファクタリングやデバッグにも役立ちます。
2. Pythonのdir()関数とは?
dir()関数の基本的な役割
dir()
関数は、指定したオブジェクトが持つ属性名やメソッド名をリスト形式で返す関数です。引数を指定しなければ、現在のローカルスコープに存在する名前の一覧を表示します。
dir()の基本構文
# 引数なし(ローカルスコープの確認)
print(dir())
# 引数あり(オブジェクトの属性やメソッドを確認)
print(dir(str)) # 文字列型のメソッド一覧
実行結果:
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__']
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', ..., 'upper', 'zfill']
このように、dir()
を使うことで、対象オブジェクトがどのような機能を持っているかを確認できます。
3. dir()関数のよくある使い方・応用例
クラスやインスタンスのメソッド確認
クラスを自作したときやライブラリを利用するときに、どんなメソッドやプロパティがあるかを調べるために使います。
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
return f"{self.name} makes a sound"
dog = Animal("Dog")
print(dir(dog))
実行結果:
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', ..., 'name', 'speak']
上記のように、インスタンスdog
が持っているname
属性やspeak()
メソッドが確認できます。
標準ライブラリの関数を調べる
例えば、math
モジュールにどのような関数があるかを調べたいときにも便利です。
import math
print(dir(math))
実行結果:
['__doc__', '__loader__', '__name__', ..., 'acos', 'asin', 'atan', ..., 'cos', 'sin', 'tan']
自分で定義した変数や関数の確認
何を定義したか分からなくなったときにも、dir()
は有効です。
x = 10
y = 20
def add(a, b):
return a + b
print(dir())
実行結果:
['__annotations__', '__builtins__', ..., 'x', 'y', 'add']
4. dir()関数の注意点・エラー対策
__(ダンダー)で始まる名前が多い理由
dir()
の出力には__xxx__
のような特殊メソッド(いわゆるマジックメソッド)が多く含まれます。これらはPython内部で特別な意味を持つメソッドで、初心者には不要な情報も含まれるため注意しましょう。
使い方を誤ると情報が多すぎることも
大量の属性があるオブジェクトにdir()
を使うと、情報量が多すぎて読みにくくなります。必要に応じてfilter()
やstartswith()
などで絞り込む工夫も重要です。
# "a"で始まる属性だけ抽出
attrs = [attr for attr in dir(str) if attr.startswith("a")]
print(attrs)
実行結果:
['__add__', '__annotations__']
存在しないオブジェクトには使えない
dir()
の引数に未定義の変数を渡すとエラーになります。事前に存在をglobals()
やlocals()
で確認すると安全です。
5. まとめ
dir()
関数は、オブジェクトの持つ属性やメソッドを一覧表示できる便利な関数です。- クラスやモジュールの構造を調べるのに役立ち、Python学習や実務での調査・デバッグにも使えます。
- 表示される特殊メソッド(
__xxx__
)に惑わされず、必要な情報をピックアップしましょう。
Python初心者が「このオブジェクト、何ができるんだろう?」と感じたとき、まずdir()
を使うクセをつけることで、学習効率が大きく向上します。
実務でもライブラリ解析やデバッグの第一歩として重宝される関数ですので、ぜひ積極的に活用してください。