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