首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MyPy --实际上如何在注释中使用类型化存根?

MyPy --实际上如何在注释中使用类型化存根?
EN

Stack Overflow用户
提问于 2019-04-04 16:15:07
回答 1查看 1.6K关注 0票数 5

注:这个答案是这样的没有回答我的问题。它只是重申了我已经读过的内容。

这是怎么回事?我读到的所有东西都说,typeshedMyPy捆绑在一起,并包含第三方库的存根。我已经在虚拟环境中安装和运行了MyPy,我正在尝试使用它来输入Flask代码,但我只是没有得到它。

我在TypeScript中有一个背景,我正在寻找类似的东西,但我不明白我们应该如何在MyPy中使用存根。例如,我有一个函数:

代码语言:javascript
复制
def create_app(config_name="default"):
    app: Flask = Flask(__name__)
    app.config.from_object(Configuration)
    CORS(app)
    register_extensions(app)
    register_blueprints(app)

    @app.route("/health")
    def health_check():
        return json.dumps({"status": "up"})

    return app

非常标准的瓶,但严格不允许任何设置,这将成为一个无法挽救的混乱。应用的类型是什么?我知道typeshed 有烧瓶的存根,但我不知道如何实际使用这些存根。typeshed文档说:

如果您只是使用mypy (或pytype或PyCharm),而不是开发mypy,则根本不需要与已键入的repo交互:类型类型的副本与mypy捆绑在一起。

因此,我假设我不需要导入类型,文档也没有提到导入它们。

例如,有一个名为app.pyi的存根,但是如果我对函数进行如下注释:

代码语言:javascript
复制
def create_app(config_name="default") -> app:

我得到了错误name app is not defined。如果我进口它:

代码语言:javascript
复制
from typeshed import app

我得到了错误Return type becomes any due to an unfollowed import,据我所知,这意味着没有这样的模块typeshed,或者它没有名为app的成员。

那么,如何才能真正访问这些typeshed存根呢?我的最后一招是简单地克隆typeshed回购,并将mypy指向它作为一个自定义类型的dir,但是我真的很想用正确的方式来做事情。

EN

回答 1

Stack Overflow用户

发布于 2022-02-10 13:52:18

尽管对于这个特定的实例,您可以只使用来自包本身的导入,但在某些情况下,您确实需要从typeshed导入类型来进行注释(在我的示例中,它试图使用StartResponse类型。

这些都是重要的,但只在像这样的if TYPE_CHECKING:块中:

代码语言:javascript
复制
from typing import TYPE_CHECKING

if TYPE_CHECKING:
    from _typeshed.wsgi import StartResponse

def application(environ: Dict, start_response: "StartResponse"):
    # etc

这只适用于排版目录中的类型(而且只应该是必需的)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55520669

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档