2015-07-26 3 views
3

Я хочу импортировать определенные элементы из модуля - только те, которые необходимы, а не все элементы этого модуля, но хотят сохранить пространство имен модуля, то есть сохранить имя модуля как «префикс» для доступа эти предметы. Другими словами, лучше всего использовать конструкции import module и from module import item.Импорт отдельных объектов с помощью пространства имен

Есть ли более простая/лучшая конструкция для этого, вместо того чтобы делать следующее (что много кода, выглядит несколько неуклюжим и все еще оставляет ненужные символы в глобальном пространстве имен)?

from types import ModuleType 
from myModule import Item1, Item2 

myModule = ModuleType("myModule") 
myModule.Item1 = Item1 
myModule.Item2 = Item2 
+2

Что вы видите, как в пользу этого? Все имена загружаются в любом случае. – jonrsharpe

+0

Вы имеете в виду только импорт предметов, которые необходимы, вместо того, чтобы делать «импорт myModule»? На мой взгляд, лучше явно указать свои зависимости. Хотя модуль может быть загружен полностью, при использовании конструкции «from» в этом контексте можно использовать только выбранные элементы. –

+0

Я имею в виду, что вы делаете что-то, что заставит всех остальных читать ваш код. «Почему вы это делаете?» * Учитывая, что каждый модуль загружается один раз, полностью, и что вы можете выбрать, чтобы весь модуль был доступен или выбрать имена, которые будут доступны напрямую (или и то и другое), в чем смысл этого промежуточного дома, где ваше намерение (* «Я импортирую' foo', но я буду использовать 'foo.bar' *), ясно видно из чтения код в любом случае? – jonrsharpe

ответ

0

Да, вы можете использовать:

from types import ModuleType as MT 
from myModule import Item1 as It1, Item2 as It2 

myModule = MT("myModule") 
It1 = Item1 
It2 = Item2 
+0

@ pfp.meijers: это не то, о чем вы просите? – Clodion

+0

Действительно. Я хочу получить доступ к элементу с именем модуля спереди - желательно также не иметь доступный элемент в глобальном пространстве имен. Поэтому я должен иметь возможность использовать myModule.Item1 и Item1 (автономный) не должны быть разрешены (доступны). –

+0

@ pfp.meijers. Вы сказали, что это неуклюжие, но вы хотите сохранить модуль в качестве префикса. Вы хотите использовать класс модуля, но не хотите заряжать глобальное пространство имен ... Я не могу помочь. – Clodion

Смежные вопросы