Я пытаюсь заархивировать задачу, которая оказывается немного сложной, поскольку я не очень хорош в метапрограммировании Python.
Я хочу иметь модуль locations
с функцией get_location(name)
, который возвращает класс, определенный в расположении папки / в файле с именем, переданным функции. Имя класса - это что-то вроде NameLocation.
Итак, структура моей папки:
program.py
locations/
__init__.py
first.py
second.py
program.py будет что-то с:
from locations import get_location
location = get_location('first')
и расположение это класс, определенный в first.py что-то вроде этого:
from locations import Location # base class for all locations, defined in __init__ (?)
class FirstLocation(Location):
pass
и т.д.
Хорошо, я перепробовал множество операторов import и getattribute , но теперь мне скучно и я сдаюсь. Как заархивировать такое поведение?
Не знаю почему, но этот код
def get_location(name):
module = __import__(__name__ + '.' + name)
#return getattr(module, titlecase(name) + 'Location')
return module
возвращает
>>> locations.get_location( 'first')
<module 'locations' from 'locations/__init__.py'>
модуль локаций! почему?!