我正在开发一个可以同时支持多个 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)中显示正确的导入和方法访问提示
我想知道的
这是定义类型提示的糟糕方式吗?如果是这样,那么做这件事的合适方法是什么?
类型提示可帮助用户传递正确的方法参数,静态类型检查器可节省大量调试时间,这就是为什么我对此进行了大量思考。