Skip to content Skip to sidebar Skip to footer

Why Should I Use __all__ In __init__ Of Python Package?

I've already read Can someone explain __all__ in Python? and I understand that it only affects from ... import * statements, but I can't figure out a real use case. Why should I re

Solution 1:

The only time you want to define __all__ in your package's __init__.py is to list the names of "exported" members that you want to export for when a user does:

from packageimport *

This is documented in 6.4.1. Importing * From a Package

Note: If you don't define an __all__ in your package then the default behaviour is as follows (from the documentation):

If __all__ is not defined, the statement from sound.effects import * does not import all submodules from the package sound.effects into the current namespace; it only ensures that the package sound.effects has been imported (possibly running any initialization code in __init__.py) and then imports whatever names are defined in the package. This includes any names defined (and submodules explicitly loaded) by __init__.py. It also includes any submodules of the package that were explicitly loaded by previous import statements. Consider this code:

A "naive" interpretation of this can be:

If you don't define __all__; a from package import * will bring in everything from that package and anything imported in that pacakge's __init__.py.

Post a Comment for "Why Should I Use __all__ In __init__ Of Python Package?"