__all__
Steven D'Aprano
steve+comp.lang.python at pearwood.info
Tue Aug 9 12:57:40 EDT 2011
Ethan Furman wrote:
> Greetings!
>
> Does anyone know/recall the original purpose of __all__?
To customise the names available for `from ... import *`:
http://docs.python.org/whatsnew/2.1.html#other-changes-and-fixes
> 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 *".
http://docs.python.org/reference/simple_stmts.html#index-1090
Also, the behaviour of __all__ with packages may be slightly different:
http://docs.python.org/tutorial/modules.html#index-1134
> 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.
--
Steven
More information about the Python-list
mailing list