inspect モジュールを使うと、関数のシグネチャや引数情報、ソースコードなどを動的に取得できます。
シグネチャの取得
import inspect def greet(name: str, greeting: str = "Hello") -> str: """挨拶を返す""" return f"{greeting}, {name}!" sig = inspect.signature(greet) print(sig) # (name: str, greeting: str = 'Hello') -> str
パラメータの詳細
各パラメータの情報を個別に取得できます。
for param_name, param in sig.parameters.items(): print(f"名前: {param_name}") print(f" デフォルト: {param.default}") print(f" アノテーション: {param.annotation}") print(f" 種類: {param.kind}")
パラメータの種類(kind)は以下の値を取ります。
| POSITIONAL_ONLY | 位置専用引数(/ の前) |
| POSITIONAL_OR_KEYWORD | 通常の引数 |
| VAR_POSITIONAL | *args |
| KEYWORD_ONLY | キーワード専用引数(* の後) |
| VAR_KEYWORD | **kwargs |
ソースコードの取得
source = inspect.getsource(greet) print(source)
関数の定義全体を文字列として取得できます。ただし、対話モードや exec で定義した関数には使えません。
その他の便利な関数
print(inspect.getfile(greet)) # 定義ファイルのパス print(inspect.getmodule(greet)) # モジュールオブジェクト print(inspect.isfunction(greet)) # True print(inspect.iscoroutinefunction(greet)) # False
inspect モジュールは、デバッグ、ドキュメント生成、フレームワーク開発など、関数を動的に扱う場面で活躍します。