Harmonise return type of builtins.__import__ and importlib.import_module (#6302)

builtins.__import__ now returns ModuleType instead of Any. In addition, add __getattr__() to ModuleType to ease using imported modules.
This commit is contained in:
Alex Waygood
2021-11-15 15:21:46 +00:00
committed by GitHub
parent 10c9d8cfce
commit aa7e277adb
4 changed files with 8 additions and 1 deletions

View File

@@ -1443,13 +1443,14 @@ class zip(Iterator[_T_co], Generic[_T_co]):
def __iter__(self) -> Iterator[_T_co]: ...
def __next__(self) -> _T_co: ...
# Return type of `__import__` should be kept the same as return type of `importlib.import_module`
def __import__(
name: str,
globals: Mapping[str, object] | None = ...,
locals: Mapping[str, object] | None = ...,
fromlist: Sequence[str] = ...,
level: int = ...,
) -> Any: ...
) -> types.ModuleType: ...
# Actually the type of Ellipsis is <type 'ellipsis'>, but since it's
# not exposed anywhere under that name, we make it private here.

View File

@@ -2,6 +2,7 @@ import types
from importlib.abc import Loader
from typing import Any, Mapping, Sequence
# `__import__` and `import_module` return type should be kept the same as `builtins.__import__`
def __import__(
name: str,
globals: Mapping[str, Any] | None = ...,

View File

@@ -178,6 +178,10 @@ class ModuleType:
__path__: MutableSequence[str]
__spec__: ModuleSpec | None
def __init__(self, name: str, doc: str | None = ...) -> None: ...
# __getattr__ doesn't exist at runtime,
# but having it here in typeshed makes dynamic imports
# using `builtins.__import__` or `importlib.import_module` less painful
def __getattr__(self, name: str) -> Any: ...
@final
class GeneratorType(Generator[_T_co, _T_contra, _V_co]):

View File

@@ -199,6 +199,7 @@ tkinter.font.Font.__getitem__ # Argument name differs (doesn't matter for __dun
traceback.TracebackException.from_exception # explicitly expanding arguments going into TracebackException __init__
types.GetSetDescriptorType.__get__ # this function can accept no value for the type parameter.
types.MemberDescriptorType.__get__ # this function can accept no value for the type parameter.
types.ModuleType.__getattr__ # this doesn't exist at runtime
types.SimpleNamespace.__init__ # class doesn't accept positional arguments but has default C signature
typing.IO.__iter__ # Added because IO streams are iterable. See https://github.com/python/typeshed/commit/97bc450acd60c1bcdafef3ce8fbe3b95a9c0cac3
typing.IO.__next__ # Added because IO streams are iterable. See https://github.com/python/typeshed/commit/97bc450acd60c1bcdafef3ce8fbe3b95a9c0cac3