Дополнительно
Вызов функции модуля с помощью ее имени (строки)
Как лучше всего вызвать функцию, заданную строкой с именем функции в программе на Python. Например, допустим, у меня есть модуль foo
, и у меня есть строка, содержимое которой "bar"
. Как лучше всего вызвать foo.bar()
?
Мне нужно получить возвращаемое значение функции, вот почему я не использую eval
. Я понял, как это сделать, используя eval
для определения временной функции, которая возвращает результат вызова этой функции, но я надеюсь, что есть более элегантный способ сделать это.
1553
12
Предполагает модуль
foo
с методомbar
:Вы можете сократить строки 2 и 3 до:
если это имеет больше смысла для вашего случая использования.
Вы можете использовать
getattr
подобным образом для методов, связанных с экземпляром класса, методов на уровне модуля, методов класса... список можно продолжить.или
locals возвращает словарь с текущей локальной таблицей символов. globals возвращает словарь с глобальной таблицей символов.
Решение Патрика, вероятно, самое чистое. Если вам нужно динамически подхватывать модуль, вы можете импортировать его следующим образом:
Просто простой вклад. Если класс, который мы должны привести в качестве примера, находится в том же файле, мы можем использовать что-то вроде этого:
Например:
И, если не класс:
Учитывая последовательность, с полным путем питона к функции, это - то, как я пошел о получении результата упомянутой функции:
Лучший ответ согласно [Питон, программируя часто задаваемые вопросы] (https://docs.python.org/3/faq/programming.html#how-do-i-use-strings-to-call-functions-methods) был бы:
Ответ (я надеюсь), никто никогда не хотел
Оценка как поведение
Почему бы не добавить автоимпортирование
В случае, если у нас есть дополнительные словари, мы хотим проверить
Мы должны пойти глубже
Поскольку, что it' s ценность, если Вы должны были передать функцию (или класс) имя и название приложения как последовательность, тогда Вы могли сделать это:
Попробуйте это. В то время как это все еще использует оценку, она только использует его для , вызывают функцию от тока context. Затем у Вас есть реальная функция, чтобы использовать, как Вы желаете.
Главная льгота для меня от этого - то, что Вы получите любые связанные с оценкой ошибки при вызове функции. Тогда Вы доберетесь только связанные с функцией ошибки, когда Вы будете звонить.
ни одно из того, что было предложено, не помогло мне. Я действительно обнаруживал это все же.
Я использую питона 2.66
Надежда это помогает
Как этот вопрос Как динамично назвать методы в классе, используя назначение названия метода на переменную [дубликат] отмеченный как дубликат как этот, я публикую связанный ответ здесь:
Сценарий, метод в классе хотят назвать другой метод на том же классе динамично, я добавил некоторые детали к оригинальному примеру, который предлагает некоторый более широкий сценарий и ясность:
Это - простой ответ, это позволит Вам очищать экран, например. Есть два примера ниже с оценкой и должностным лицом, которое напечатает 0 наверху после очистки (если you' ре используя Windows, изменитесь 'ясный' 'cls', Linux и пользователи Mac уезжают, как, например), или просто выполните его, соответственно.