Ever wondered how to make package export both its submodules for use with
from package import * and re-export module members for use with
from package import ClassName? Well, you can of course specify
from .module import * for each module, but that’s repeating yourself!
Instead, here’s a black magic (not really) technique which requires to specify each module only once.
# __init__.py __all__ = [...] from . import * for module in __all__: m = globals()[module] try: all_attrs = m.__all__ except AttributeError: all_attrs = [name for name in dir(m) if name != '_'] for name in all_attrs: globals()[name] = getattr(m, name)
Now, there are a lot of reasons not to use this. Somebody would argue that it’s a bad idea to re-export module members in package and that is correct in lots of cases. So only use this if you really know what are you doing and why.