簡體   English   中英

導入模塊的 Python 類型提示

[英]Python type hinting on imported modules

我發現 Flask 的自動完成功能有些欠缺——這是因為在內部,特定於上下文的對象(例如current_apprequestlogger實際上是LocalProxy 因此 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.崩潰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`

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM