__all__
очень хорошо - это помогает вести операторы импорта без автоматического импорта модулей
http://docs.python.org/tutorial/modules.html#importing-from-a-package
с использованием __all__
и import *
является избыточным, требуется только __all__
Я думаю, что одна из наиболее веских причин использовать import *
в __init__.py
для импорта пакетов - это возможность реорганизовать сценарий, который вырос в несколько сценариев, не ломая существующее приложение. Но если вы разрабатываете пакет с самого начала. Я думаю, что лучше оставить __init__.py
файлы пустыми.
например:
foo.py - contains classes related to foo such as fooFactory, tallFoo, shortFoo
тогда приложение растет и теперь это целая папка
foo/
__init__.py
foofactories.py
tallFoos.py
shortfoos.py
mediumfoos.py
santaslittlehelperfoo.py
superawsomefoo.py
anotherfoo.py
тогда скрипт инициализации может сказать
__all__ = ['foofactories', 'tallFoos', 'shortfoos', 'medumfoos',
'santaslittlehelperfoo', 'superawsomefoo', 'anotherfoo']
# deprecated to keep older scripts who import this from breaking
from foo.foofactories import fooFactory
from foo.tallfoos import tallFoo
from foo.shortfoos import shortFoo
, чтобы сценарий, написанный для выполнения следующих действий, не прерывался во время изменения:
from foo import fooFactory, tallFoo, shortFoo