Вопрос-Ответ

Calling a function of a module by using its name (a string)

Вызов функции модуля с использованием его имени (строки)

Как мне вызвать функцию, используя строку с именем функции? Например:

import foo
func_name = "bar"
call(foo, func_name) # calls foo.bar()
Переведено автоматически
Ответ 1

Дан модуль foo с методом bar:

import foo
bar = getattr(foo, 'bar')
result = bar()

getattr аналогично может использоваться для методов, связанных с экземпляром класса, методов уровня модуля, методов класса... список можно продолжить.

Ответ 2

  • Использование locals(), которое возвращает словарь с текущей локальной таблицей символов:


    locals()["myfunction"]()


  • Использование globals(), которое возвращает словарь с глобальной таблицей символов:


    globals()["myfunction"]()


Ответ 3

На основе решения Патрика, чтобы также получить модуль динамически, импортируйте его с помощью:

module = __import__('foo')
func = getattr(module, 'bar')
func()
Ответ 4

Простой вклад. Если класс, который нам нужен для создания экземпляра, находится в том же файле, мы можем использовать что-то вроде этого:

# Get class from globals and create an instance
m = globals()['our_class']()

# Get the function (from the instance) that we need to call
func = getattr(m, 'function_name')

# Call it
func()

Например:

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 line
getattr(globals()['A'](), 'sampleFunc')('sample arg')

И, если не класс:

def sampleFunc(arg):
print('you called sampleFunc({})'.format(arg))

globals()['sampleFunc']('sample arg')
python