【问题标题】:From variable name to type hint从变量名到类型提示
【发布时间】:2017-05-20 03:28:28
【问题描述】:

有没有办法通过变量名定义类型提示?

例子:

每当我在我的代码中命名一个变量 response 时,我希望它有一个指向 django.http.HttpResponse 的类型提示。

我的用例是 PyCharm 等 IDE 的类型提示。到目前为止,我还没有在运行时对此进行评估的用例。

我想要一个通用的(而不是特定于 pycharm 的)解决方案。

我想避免一遍又一遍地进行手动和显式类型提示。

请告诉我你为什么不赞成这个问题。我很好奇并愿意学习。

【问题讨论】:

  • @MooingRawr 我在发布之前阅读了您提供的链接。我不明白这对我有什么帮助。我不想一次又一次地做明确的类型提示。
  • 我不认为将变量名称隐式链接到类型是一个好习惯。每当你定义它时,使用注释来定义它的类型以使其明确,而不是在可见代码之外的某个地方定义它
  • @Alex 我尽量避免使用过时的 cmets。这个评论是什么意思?它告诉我这个叫做“响应”的东西是......惊喜,惊喜......它告诉我这是一个响应。是的,好消息!我喜欢“干净代码”和“干净编码器”作者的指导方针:informit.com/articles/article.aspx?p=1326509
  • @guetti 并不是每个使用你的代码的人都会使用 pycharm,如果事实上修复它的正确方法是在 django 源代码中添加类型,所以每当你调用任何 HttpResponse 返回函数 pycharm将了解它并帮助您使用它。所以你可以通过为 django 做贡献来帮助每个人。
  • 使用PEP-526,您可以每次都明确指定变量的类型。不过,这需要 3.6 Python 版本。

标签: python type-hinting


【解决方案1】:

为所有返回 HttpResponse 的方法添加类型注释

Python 中的变量需要声明。它是通过 lvalue 创建的(我的定义,也许有更好的方式来描述它)

response=handle_request(request)

如果handle_request()有类型注解,那么response就不需要做类型注解了。

这不是直接回答问题,而是解决问题背后的问题。

此答案基于用户 Alex 的评论。谢谢你:-)

【讨论】:

  • 这是我的首选答案,但我需要等到明天才能接受。
【解决方案2】:

通过自动生成的存根文件添加类型提示

您可以自动生成包含源代码类型提示的 stub files(扩展名为 .pyi)。

我想这种自动生成并不难实现。

这对名为“将类型注释添加到所有首次使用响应”的答案有好处,即源代码多次不包含同一行 (response: django.http.HttpRequest)

缺点:您需要一个构建步骤来创建存根文件。

【讨论】:

  • 小提示:如果您有一个通用的测试套件(或其他自动化运行用例的方式),您可以通过MonkeyTypepyannotate 在运行时生成类型来受益。
  • @hoefling 很棒。这很有趣,这让我笑了。疯狂的想法,但好消息。通过执行测试来创建类型注释。感谢您的提示!
【解决方案3】:

response的所有首次使用添加类型注释

def test_foo():
    response: django.http.HttpRequest
    response=handle_request(request)

https://www.python.org/dev/peps/pep-0526/

这有一个缺点,即response: django.http.HttpRequest 需要在作用域中的每次第一次使用之前放置。 AFAIK 没有办法在每个模块级别只定义一次

【讨论】:

    猜你喜欢
    • 2013-09-28
    • 2010-12-21
    • 2010-12-20
    • 2013-12-26
    • 1970-01-01
    • 1970-01-01
    • 2022-12-06
    • 2019-03-21
    • 2018-07-30
    相关资源
    最近更新 更多