【问题标题】:What is the type (for mypy) of a module created with importlib?使用 importlib 创建的模块的类型(对于 mypy)是什么?
【发布时间】:2021-11-17 14:20:58
【问题描述】:

我正在加载一个带有importlib 的模块:

from importlib.machinery import SourceFileLoader
from importlib.util import spec_from_loader, module_from_spec
from pathlib import Path
from typing import Union

PathStr = Union[Path, str]

def load_module(module_path:PathStr, module_name="module"):
    """Load and return a module"""
    loader = SourceFileLoader(module_name, module_path)
    spec = spec_from_loader(loader.name, loader)
    module = module_from_spec(spec)
    loader.exec_module(module)
    return module

函数返回的模块类型是什么?我想不通。

【问题讨论】:

  • 可以this similar question 帮忙吗?
  • 乍一看,它看起来......很难挖掘出来。好收获!
  • 你可以使用reveal_type(module)让mypy在类型检查时报告推断的类型。
  • @Wombatz ...确实可以。但它揭示了Any :)

标签: python-3.x mypy python-importlib


【解决方案1】:

这个类似的答案说明了一切: https://stackoverflow.com/a/48981829/1603480

这里是持久化信息的总结:importlib.import_module 的类型注解只返回types.ModuleType

来自the typeshed source

def import_module(name: str, package: Optional[str] = ...) -> types.ModuleType: ...

...然后解决方案的作者提供一些建议帮助mypy

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-28
    • 1970-01-01
    • 1970-01-01
    • 2016-08-06
    • 1970-01-01
    相关资源
    最近更新 更多