Python で文字列名から関数を呼び出す

Rayven Esplanada 2023年1月30日
  1. Python で関数を変数に代入するには getattr() を使用する
  2. Python で文字列から関数を呼び出すために locals()globals() を使用する
Python で文字列名から関数を呼び出す

このチュートリアルでは、Python で関数名を使って文字列形式で呼び出す方法を紹介します。

この問題のユースケースは、モジュールやクラスから関数を変数に代入することです。

Python で関数を変数に代入するには getattr() を使用する

関数 getattr() はオブジェクトまたはモジュールから属性の値を返します。第 1 引数はオブジェクトまたはモジュールの名前であり、第 2 引数は属性の名前を含む文字列の値です。

問題の属性は、変数、関数、またはサブクラスの形をしています。

与えられた属性を持つ User という名前のクラスがあるとしましょう。

# Filename: user.py
class User:
    name = "John"
    age = 33

    def doSomething():
        print(name + " did something.")

さて、属性関数 doSomething() をメソッドに格納して呼び出したいとします。これを行うには、関数 getattr() を使用します。

from user import User as user

doSomething = getattr(user, "doSomething")

doSomething(user)

出力:

John did something.

これで、関数 user.doSomething() は変数 doSomething の中にラップされました。この方法では、関数を呼び出すためにオブジェクト user を指定する必要はありません。

Python で文字列から関数を呼び出すために locals()globals() を使用する

文字列から関数を呼び出すもう一つの方法は、組み込み関数 locals()globals を使用することです。これら 2つの関数は、与えられたソースコードの現在のシンボルテーブルを表すPython 辞書を返します。

この 2つの関数の違いは名前空間です。名前が示すように、locals() はローカル変数を含む辞書を返し、globals() はローカル変数を含む辞書を返します。関数名も文字列の形式で返されます。

これらのメソッドを例に挙げてみましょう。2つのランダム関数を宣言し、両方の組み込み関数を使って呼び出します。

def myFunc():
    print("This is a function.")


def myFunc2():
    print("This is another function.")


locals()["myFunc"]()
globals()["myFunc2"]()

出力:

This is a function.
This is another function.

要約すると、文字列から関数を呼び出すには、関数 getattr()locals()globals() を用います。getattr() は関数がどのオブジェクトやモジュールにあるかを知る必要がありますが、locals()globals() はその関数のスコープ内にある関数を探します。

Rayven Esplanada avatar Rayven Esplanada avatar

Skilled in Python, Java, Spring Boot, AngularJS, and Agile Methodologies. Strong engineering professional with a passion for development and always seeking opportunities for personal and career growth. A Technical Writer writing about comprehensive how-to articles, environment set-ups, and technical walkthroughs. Specializes in writing Python, Java, Spring, and SQL articles.

LinkedIn

関連記事 - Python Function

関連記事 - Python String