То есть вы хотите иметь операторы импорта, относящиеся к предыдущим импортам?
Определенно что-то, что я попробовал в одной точке.У меня было несколько очень длинных операторов импорта, имеющих общий корень, поэтому я постарался выделить их.Я не мог заставить его работать с прямыми операторами импорта, но, возможно, я не слишком старался.
Имейте в виду, что поведение оператора импорта по умолчанию будет создавать объект модуля.Затем он свяжет его с sys.modules, а затем свяжет его в пространстве имен вашего текущего модуля с именем из оператора import.См. http://docs.python.org/tutorial/modules.html.
Объект модуля имеет пространство имен.Если модуль не является пакетом, его пространство имен определяется оценкой содержимого файла .py модуля.Однако, если это пакет, то пространство имен происходит из модуля __init__.py
в пакете.Другие модули в пакете не импортируются автоматически и недоступны в пространстве имен пакета.Вы должны импортировать их отдельно.
Оператор from ... import загрузит модуль в sys.modules.Затем он вытянет объект из того модуля, на который вы ссылались при импорте.Наконец, он связывает этот объект в пространство имен вашего текущего модуля с именем из оператора import.По сути, вы копируете привязку из одного пространства имен в другое.Честно говоря, я нахожу, что это обычно скрывает источник имени, когда вы используете его позже (поэтому я не делаю это много).
К вопросу:
Ваше использование __import__
- это способ обойти ограничения оператора импорта.Смотрите документацию по питону .Однако, если вы используете оператор from..import, не пытайтесь повторно использовать полученное имя в __import__
, если только оно не указывает на объект модуля (что, вероятно, не так).Для импорта необходима только последовательность имен модулей, разделенных точками.
Также имейте в виду, что простое указание явного импорта может быть более понятным способом указать, откуда пришел объект.