Categories: Python

【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
ゆうまる

独学でプログラミングを勉強しているおじさん。いろんな言語を勉強したが浅く広くなためあまり仕事につながらない。また忘れっぽいため自分のブログを備忘録としても使っている。産まれてこのかたずっとネコを飼ってる生粋のネコ派。最近お腹が出てきて筋トレに奮闘中!

Recent Posts

【Dart】コンストラクタのデフォルト引数について

Dartのコンストラクタのデフォルト引数…

4週間 ago

【Unity】有料アセットを無料で手に入れる方法

この記事では、Unityの有料アセットを…

5か月 ago

【Python】任意の秒数だけ処理を一時停止する方法【sleep()関数】

この記事では、Pythonで任意の秒数だ…

1年 ago

【Python】Wordの文書の新規作成と読み書き

この記事では、Pythonを使ってWor…

1年 ago

【Python】メタクラスって結局なんなの?

この記事では、Pythonのメタクラスに…

1年 ago