gpt4 book ai didi

导入模块的 Python 类型提示

转载 作者:行者123 更新时间:2023-12-04 11:15:30 24 4
gpt4 key购买 nike

我发现 Flask 的自动完成功能有些欠缺——这是因为在内部,特定于上下文的对象,例如 current_app , request , 和 logger实际上是 LocalProxy s。因此 PyCharm 不知道如何处理这种类型。

所以对我来说,显而易见的解决方案是在导入的模块上应用类型提示。除非你不能这样做!从 Python 3.7 开始,似乎没有这样的语法来促进这一点。

因此,下一个显而易见的解决方案是使用显式设置的类型制作每个特定于上下文的模块的本地副本,如下所示:

from logging import Logger
from flask import Flask, Request, Blueprint, request, current_app as app

app: Flask = app
logger: Logger = app.logger
request: Request = request

...在您实际尝试启动服务器之前一直有效,在这种情况下,应用程序因 RuntimeError: Working outside of application context. 而崩溃

事实证明,我们实际上可以将相关类型提示封装在应用程序上下文内的类或其他范围内。
@foo_blueprint.route('/foo', methods=['GET'])
def foo(cls):
_app: Flask = app
_logger: Logger = app.logger
_request: Request = request
# ...

...这有效,但在任何可以想象的意义上都非常尴尬。

是否有合理的解决方案可以在 Flask 的应用程序上下文中获取正确的类型提示?

最佳答案

你有没有试过这个?我知道它至少在从其他模块导入普通变量时有效。

# in module_a.py
my_str = 23


# in module_b.py
from module_a import my_str

my_str: str

# The IDE should now suggest string methods when trying to access
# properties of `my_str`

关于导入模块的 Python 类型提示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53221949/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com