Python のファイルにある関数の一覧を取得する - dir と getmembers の違い
2023.02.18
Python のファイルにある関数の一覧を取得するには inspect
ライブラリを使います。今回は misc というファイルにある関数をとりだします。
misc.py
food = 'pizza'
def add(number: int):
return number + 1
def hello():
print('hello')
import
でファイルをインポートしたら、それを getmembers
の引数にします。二番目に isfunction
をあてると関数のみが抽出されます。
from inspect import getmembers, isfunction
from file import misc
members = dir(misc)
functions = getmembers(misc, isfunction)
print(members)
# ['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'add', 'food', 'hello']
print(functions)
# [('add', <function add at 0x101012980>), ('hello', <function hello at 0x1010128e0>)]
getmembers はリストを返します。それぞれの要素は名前と関数オブジェクトのタプルです。
from inspect import getmembers, isfunction
from file import misc
functions = getmembers(misc, isfunction)
for function in functions:
name = function[0]
instance = function[1]
print(f'{name} : {type(name)}')
print(f'{instance} : {type(instance)}')
# add : <class 'str'>
# <function add at 0x10577d580> : <class 'function'>
# hello : <class 'str'>
# <function hello at 0x105802980> : <class 'function'>
dir
最初のコードにある dir
は __builtins__
といった余計なメンバーも返します。food
はファイル misc.py
に定義された変数で、これも dir
の返すリストに含まれている。
関数の一覧をとりだすときは dir
よりも getmembers
のほうがいいかもしれない。