Как динамически вызывать class.function (value) в Python 3 - PullRequest
0 голосов
/ 23 мая 2018

ОК, поэтому у меня есть строка, x = module.class.test_function(value), и я хочу вызвать ее и получить ответ.Я пытался использовать getattr(module.class, test_function)(value), но он выдает ошибку:

AttributeError: module 'module' has no attribute 'test_function'

Я новичок в Python, как мне это сделать?

1 Ответ

0 голосов
/ 23 мая 2018

Имеется файл my_module.py:

def my_func(greeting):
    print(f'{greeting} from my_func!')

Вы можете импортировать свою функцию и вызывать ее обычно следующим образом:

>>> from my_module import my_func
>>> my_func('hello')
hello from my_func!

В качестве альтернативы, если вы хотите импортировать функцию динамическис getattr:

>>> import my_module
>>> getattr(my_module, 'my_func')
<function my_func at 0x1086aa8c8>
>>> a_func = getattr(my_module, 'my_func')
>>> a_func('bonjour')
bonjour from my_func!

Я бы рекомендовал этот стиль только в том случае, если он требуется вашим сценарием использования, например, имя вызываемого метода неизвестно до времени выполнения, методы генерируются динамически или что-то ещевот так.

Хороший ответ, который объясняет getattr более подробно, - - Зачем использовать встроенные модули setattr () и getattr ()? , и вы можете найти немного больше в http://effbot.org/zone/python-getattr.htm.

...