Python PR

【Python】関数、またはメソッドを文字列で呼び出す

記事内に商品プロモーションを含む場合があります

この記事では、Pythonの関数やメソッドを文字列で呼び出す方法を解説します。

Link関数やメソッドを呼ぶのに文字列を使うにはどうしたらいいですか? - プログラミング FAQ — Python 3.10.4 ドキュメント

辞書を使う

辞書に文字列をkey、関数をvalueとして格納することで任意の文字列で関数を呼び出すことができます。

def a():
    print('a')


def b():
    print('b')


# 辞書に関数を名前を付けて格納
d = {'f1': a, 'f2': b}

# 呼び出し
d['f1']()

実行結果

a

getattr関数を使う

getattr関数は、オブジェクトの属性を文字列で取得することができます。

getattr(object, name[, default])

getattr関数を使ってインスタンスから文字列でメソッドを取得して変数に代入します。

class C:

    def a(self):
        print('a')

    def b(self):
        print('b')
        

# インスタンス化
c = C()

# メソッドを文字列で取得
a = getattr(c, 'a')

# 呼び出し
a()

実行結果

a

globals関数、またはlocals関数を使う

globals関数は、モジュールの名前空間を実装した辞書を返します。locals関数もモジュールレベルではglobals関数と同じ辞書を返します。

globals()
locals()

名前空間を実装した辞書から文字列で使用したい関数を取得することができます。

def a():
    print('a')

def b():
    print('b')

# 辞書
f1 = globals()['a']
f2 = locals()['b']

# 呼び出し
f1()
f2()

実行結果

a
b