[spec] Clarification: Are symbols not listed in __all__
ever considered public? #1829
Description
According to https://typing.readthedocs.io/en/latest/guides/libraries.html#library-interface-public-and-private-symbols:
A module can expose an
__all__
symbol at the module level that provides a list of names that are considered part of the interface. This overrides all other rules above, allowing imported symbols or symbols whose names begin with an underscore to be included in the interface.
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:
# module.py
__all__ = ["identity"]
from typing import TypeVar
T = TypeVar("T")
def identity(x: T) -> T:
return x
Are TypeVar
and T
considered public members of module.py
? If so, what is the suggested way to exclude them? T
could be renamed to _T
, but is one supposed to do from typing import TypeVar as _TypeVar
, if one wants TypeVar
to not be considered a public member of module
?