2013-03-17 2 views
0

Если у вас есть такой модуль, как module, можете ли вы обойти его и использовать функции, доступные внутри, без использования модуля?Есть ли способ обойти имя пространства/модуля в Python?

Я импортировал модуль, но компилятор все еще жалуется, что ему не нужно найти function. Мне все еще нужно использовать module.function().

У него есть еще много функций, поэтому я не хочу переопределять их один за другим, но, если возможно, просто не набирайте module.

+2

Знаете ли вы, что «из модуля импорта»?? – isedev

+0

Спасибо, я предположил, что это сделано для функций неявно. Теперь это работает. Есть ли способ ограничить импорт для всех функций? Потому что он также имеет другие типы и т. Д. Просто интересно. –

+1

В вашем 'module' вы можете определить переменную с именем' __all__', которая содержит имена всего, что будет импортировано с помощью '*'. –

ответ

5

Импорт в Python просто добавляет материал в пространство имен. Как вы квалифицируете импортированные имена, это разница между import foo и from foo import bar.

В первом случае вы должны будете импортировать только имя модуля foo, и именно так вы бы достигли чего-либо в нем, поэтому вам нужно сделать foo.bar(). Во втором случае вы явно импортируете толькоbar, и теперь вы можете назвать это так: bar().

from foo import * будет импортировать все имена импортируемые (те, которые определены в специальной переменной __all__) в текущее пространство имен. Это, хотя работает - не рекомендуется, потому что вы можете случайно перезаписать существующее имя.

foo = 42 
from bar import * # bar contains a `foo` 
print foo # whatever is from `bar` 

Лучше всего ввозить то, что вам нужно:

from foo import a,b,c,d,e,f,g

Или вы можете псевдоним от имени

import foo as imported_foo

Нижняя линия - попытаться избежать from foo import *.

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