Open randolf-scholz opened 3 months ago
First, the document you're citing applies to type stubs and "py.typed" libraries. It doesn't define rules for local modules or modules in libraries that are not "py.typed".
The __all__
list defines the symbols that are imported via a wildcard import. All such symbols are treated as public in a type stub or a "py.typed" module. Symbols that are not listed within __all__
are not imported via a wildcard import, and they may be considered public or private according to the other rules listed in the document.
In the example you provided, assuming that module.py
is part of a "py.typed" package, T
and identity
would be considered public. TypeVar
is private because it does not use a redundant form of import (i.e. from typing import TypeVar as TypeVar
).
According to https://typing.readthedocs.io/en/latest/guides/libraries.html#library-interface-public-and-private-symbols:
Does this mean that if
__all__
is present: ① A symbol is public if and only if it is listed in__all__
or ② If a symbol is listed in__all__
, it is public, but things not listed in__all__
can still be considered public as well?For example:
Are
TypeVar
andT
considered public members ofmodule.py
? If so, what is the suggested way to exclude them?T
could be renamed to_T
, but is one supposed to dofrom typing import TypeVar as _TypeVar
, if one wantsTypeVar
to not be considered a public member ofmodule
?