python 动态导入和模块类型支持

问题描述 投票:0回答:0

我正在开发一个可以同时支持多个 orm 模块的 python 包。 问题是在提供静态类型检查期间出现的。 由于它可以支持多个模块,因此很难为同一变量定义类型检查。

我有一个名为 typing 的文件,我在其中收集我所有的类型变量并从这里导入这些类型(还不知道这个决定是对还是错。)

问题可能是用户可以说例如安装了 sqlalchemy 或者另一个用户安装了 pymongo 谁将使用我的包。

我将如何为根据安装的模块接收这些类的对象的方法定义类型提示?

我目前正在考虑如何处理它:

try:
    from sqlalchemy.orm.decl_api import DeclarativeMeta
    HAS_SQLALCHEMY=True
except ImportError:
    HAS_SQLALCHEMY=False

try:
    from pymongo import Server
    HAS_PYMONGO=True
except ImportError:
    HAS_PYMONGO=False
    
if HAS_PYMONGO:
    object_type = Server

if HAS_SQLALCHEMY:
    object_type = DeclarativeMeta

然后当我从键入文件导入 object_type 时,如果安装了这些 orm 模块中的任何一个,它至少会在 ide(pycharm)中显示正确的导入和方法访问提示
我想知道的
这是定义类型提示的糟糕方式吗?如果是这样,那么做这件事的合适方法是什么?
类型提示可帮助用户传递正确的方法参数,静态类型检查器可节省大量调试时间,这就是为什么我对此进行了大量思考。

python-3.x sqlalchemy annotations pymongo type-hinting
© www.soinside.com 2019 - 2024. All rights reserved.