Як найкраще викликати функцію, якщо в програмі на Python задано рядок з іменем функції. Наприклад, нехай у мене є модуль foo
, і у мене є рядок, вміст якого має вигляд "bar"
. Як краще викликати foo.bar()
?
Мені потрібно отримати значення, що повертається функцією, тому я не можу просто використати eval
. Я зрозумів, як це зробити, використовуючи eval
для визначення тимчасової функції, яка повертає результат виклику цієї функції, але я сподіваюся, що є більш елегантний спосіб зробити це.
Припустимо, модуль foo
з методом bar
:
import foo
method_to_call = getattr(foo, 'bar')
result = method_to_call()
Можна було б скоротити рядки 2 та 3 до:
result = getattr(foo, 'bar')()
якщо це має більше сенсу для вашого варіанта використання.
Ви можете використовувати getattr
таким чином у методах, пов'язаних з екземпляром класу, методах на рівні модуля, методах класу... список можна продовжувати.
Рішення Патріка, мабуть, найчистіше. Якщо вам також потрібно динамічно підхопити модуль, ви можете імпортувати його як:
module = __import__('foo')
func = getattr(module, 'bar')
func()