Я не могу использовать это
import foo
method_to_call = getattr(foo, 'bar')
result = method_to_call()
, потому что имя модуля жестко закодировано, и я не могу использовать это
module = __import__('foo')
func = getattr(module, 'bar')
func()
, потому что модуль является вложенным.
Я попробовал это
customer = 'jci'
module = __import__('customer.{customer_name}.gt'.format(customer_name=customer_name)) # AttributeError: module 'customer' has no attribute 'get_gt'
#module = __import__('customer.{customer_name}'.format(customer_name=customer_name), fromlist=['gt']) # AttributeError: module 'customer.jci' has no attribute 'get_gt'
#module = __import__('customer.{customer_name}.gt'.format(customer_name=customer_name), fromlist=[]) # AttributeError: module 'customer' has no attribute 'get_gt'
func = getattr(module, 'get_gt')
gt = func()
, но потерпел неудачу с ошибками, указанными в комментарии вместе с каждым вариантом.
get_gt()
- это функция внутри gt.py
файла внутри каталога customer/jci
.Внутри каждого каталога есть __init__.py
.
Работает следующий жестко закодированный код:
import customer.jci.gt as g
gt = g.get_gt()
Как преодолеть?