steve+comp.lang.python at pearwood.info
Tue Aug 9 18:57:40 CEST 2011
Ethan Furman wrote:
> Does anyone know/recall the original purpose of __all__?
To customise the names available for `from ... import *`:
> I had thought it was primarily to specify what would be imported when
> `from ... import *` was executed, such as for tk;
Yes, that was the original use. If __all__ is not defined, Python will
import everything that doesn't start with an underscore.
> today, it seems it is
> also used to specify the API for the module, and so the help() subsystem
> will only provide details for those items found in __all__.
The two meanings are assumed to be synonymous: names in the public API
should be importable with *, and importable names should be in the public
API. You can't specify "this can be imported with *, but isn't public"
or "this is public, but not importable with *".
Also, the behaviour of __all__ with packages may be slightly different:
> The issue I'm having with this is that there are roughly a dozen items I
> would like to make available via the `import *` mechanism in my dbf
> module, and another dozen that, while part of the public API, don't need
> to be available via an `import *`.
You have to choose both, or neither, but you can't have just one.
More information about the Python-list