Вызов функции модуля с использованием его имени (строки) - PullRequest
1421 голосов
/ 06 августа 2008

Как лучше всего вызывать функцию по заданной строке с именем функции в программе Python. Например, предположим, что у меня есть модуль foo, и у меня есть строка с содержимым "bar". Как лучше всего позвонить foo.bar()?

Мне нужно получить возвращаемое значение функции, поэтому я не просто использую eval. Я понял, как это сделать, используя eval для определения временной функции, которая возвращает результат вызова этой функции, но я надеюсь, что есть более элегантный способ сделать это.

Ответы [ 11 ]

0 голосов
/ 26 марта 2019

Как этот вопрос Как динамически вызывать методы в классе, используя присвоение имени метода переменной [duplicate] , помеченный как дубликат, как этот, я публикую соответствующий ответ здесь:

Сценарий таков: метод в классе хочет динамически вызывать другой метод в том же классе. Я добавил некоторые детали в исходный пример, который предлагает более широкий сценарий и ясность:

class MyClass:
    def __init__(self, i):
        self.i = i

    def get(self):
        func = getattr(MyClass, 'function{}'.format(self.i))
        func(self, 12)   # This one will work
        # self.func(12)    # But this does NOT work.


    def function1(self, p1):
        print('function1: {}'.format(p1))
        # do other stuff

    def function2(self, p1):
        print('function2: {}'.format(p1))
        # do other stuff


if __name__ == "__main__":
    class1 = MyClass(1)
    class1.get()
    class2 = MyClass(2)
    class2.get()

Вывод (Python 3.7.x)

function1: 12

функция2: 12

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...