2015-04-07 4 views
1

Я пишу модуль Python и в одном из моих файлов у меня довольно сложное выражение для __all__:Доступ к __all__ другого модуля

# foo.py 
__all__ = [ ... ] 

В модуле верхнего уровня, который я хочу пользователям использовать, я хочу разоблачить все это плюс несколько других. Я просто явно ссылаюсь на __all__?

# the_module.py 
import foo 

__all__ = foo.__all__ + [ ... ] 

или есть какой-то способ сделать это с помощью:

from foo import * 

__all__ = ??? 
+0

Есть ли какая-то причина, чтобы избежать первой формы? Ты это пробовал? – jonrsharpe

+0

@jonrsharpe Я пробовал, и он работает, он просто ... выглядит не так :) – Barry

+1

Есть ли вещи в 'the_module.py', которые вы ** не ** хотите выставить? Если нет, вам вообще не нужно '__all__'; вы можете просто включить 'from foo import *'. – jonrsharpe

ответ

1

Обратите внимание, что __all__ используется для ограничения имена, будут импортированы из ag модуль. Если в the_module.py нет ничего, что пользователи не должны иметь доступ к, тогда вам не нужно его определять.

from foo import * принесет во всем, определенном в foo.__main__, так что пользователи, которые import the_module сможет получить доступ ко всем из этих имен и ничего, определенных в the_module.py непосредственно.

1

Вы можете просто попробовать:

# foo.py 
__all__ = [1,2,3]  

А потом

# bar.py 
import foo 
print foo.__all__ 

выход:

>>> python bar.py 
[1, 2, 3] 

Или, если вы хотите импортировать только __all__ непосредственно:

# bar.py 
from foo import __all__ 
print __all__ 

выход:

>>> python bar.py 
[1, 2, 3] 

Python очень дружелюбен только собирается за него.

Если вы хотите использовать from module import * форму:

# foo.py 
__all__ = [1,2,3] 
__other_thing__ = [4,5,6] 

А потом

# bar.py 
from foo import * 
print foo.__all__ 
print foo.__other_thing__ 

выход:

>>> python bar.py 
[1, 2, 3] 
[4, 5, 6] 
Смежные вопросы