2016-10-28 3 views
0

Я хочу, чтобы создать какой-то пользовательский интерфейс, и пользователь должен иметь возможность ввести имя функции он хочет работать:Выполнить строку как метод - Python

task = input('Programm to run: ') 

После task определяется Я хочу для выполнения требуемой задачи, как:

task() 

Если, например, нужная программа functon скрипт должен выполнить function().

+2

Если вы хорошо придерживаться функций на данный момент, ваш вопрос уже ответил на SO [Вызов функции верхнего уровня по имени в Python] (HTTP: // StackOverflow .com/questions/12667537/invoking-op-level-function-by-name-in-python) – agg3l

+0

Дублирующий вопрос предназначен исключительно для вызова функций верхнего уровня, что не является отличной идеей, и OP не нужно делать это для их использования дело. Принятый ответ позволяет «вызывать» любую переменную в области верхнего уровня, которая может быть плохой идеей. Другие варианты имеют раздражающий шаблон, который упоминает каждое имя функции трижды. –

+0

@AlexHall - Я не думаю, что с этим возникли проблемы. Лично я бы использовал популярный вопрос [переменные переменные] (http://stackoverflow.com/questions/1373164/how-do-create-a-variable-number-of-variables-in-python), но связанный дубликат является более конкретным. Словарь - это популярный способ сделать это. – TigerhawkT3

ответ

0

Вот один из способов:

class Tasks(object): 
    def foo(self): 
     print('hi') 

    def bar(self): 
     print('bye') 


task = 'foo' 

getattr(Tasks(), task)() 
+0

Словарь, вероятно, будет более естественным контейнером для строковых функций, чем экземпляр в этой ситуации. – Blckknght

+0

Да, но для этого требуется больше дублирования и дублирования имен. Можно определить функцию, а затем забудьте добавить ее в словарь. –

+0

Хм, справедливо. Поскольку ваш класс используется исключительно как пространство имен для его методов и не содержит никаких данных, возможно, вы должны сделать методы статическими и посмотреть их непосредственно на класс, а не на экземпляр? – Blckknght