Вызов функции модуля с использованием его имени (строки)
Как мне вызвать функцию, используя строку с именем функции? Например:
import foofunc_name = "bar"call(foo, func_name) # calls foo.bar()
Переведено автоматически
Ответ 1
Дан модуль foo с методом bar:
foo
bar
import foobar = getattr(foo, 'bar')result = bar()
getattr аналогично может использоваться для методов, связанных с экземпляром класса, методов уровня модуля, методов класса... список можно продолжить.
getattr
Ответ 2
Использование locals(), которое возвращает словарь с текущей локальной таблицей символов:
locals()
locals()["myfunction"]()
Использование globals(), которое возвращает словарь с глобальной таблицей символов:
globals()
globals()["myfunction"]()
Ответ 3
На основе решения Патрика, чтобы также получить модуль динамически, импортируйте его с помощью:
module = __import__('foo')func = getattr(module, 'bar')func()
Ответ 4
Простой вклад. Если класс, который нам нужен для создания экземпляра, находится в том же файле, мы можем использовать что-то вроде этого:
# Get class from globals and create an instancem = globals()['our_class']()# Get the function (from the instance) that we need to callfunc = getattr(m, 'function_name')# Call itfunc()
Например:
class A: def __init__(self): pass def sampleFunc(self, arg): print('you called sampleFunc({})'.format(arg))m = globals()['A']()func = getattr(m, 'sampleFunc')func('sample arg')# Sample, all on one linegetattr(globals()['A'](), 'sampleFunc')('sample arg')
И, если не класс:
def sampleFunc(arg): print('you called sampleFunc({})'.format(arg))globals()['sampleFunc']('sample arg')