【问题标题】:Python. Hint for variablePython。变量提示
【发布时间】:2017-03-25 20:25:13
【问题描述】:

我使用PyCharm 作为编辑器。例如,我有下一个功能:

def get_instance():
    # method without doc sctring in some module
    # returns instance of MyClass
    return some_var

我有第二个文件调用get_instance():

var = get_instance()

如何定义值的数据类型?我想对变量使用自动完成。

例如在php 中会是这样的:

/** @var MyClass $var */
$var = getInstance();

之后我将看到$var 的所有方法和属性。如何为python变量声明文档字符串?我知道:type 和:rtype,但是如果我需要为特定变量声明类型?我可以声明几种类型吗?我该怎么办?

注意:我无法对get_instance() 进行任何更改。

【问题讨论】:

  • 你看过Hints吗?
  • 你能澄清一下你需要或想在哪里使用文档字符串吗?
  • @Rightleg 在任何代码位置。示例:get_docker() 返回Docker 实例(我知道)。但是没有文档字符串的功能,我无法更改它。所以,我打电话给var = get_docker()。我想定义var的类型(它是Docker实例)。
  • @Olian04 它仅适用于 python 3。对吗?还有一件事:我不能改变功能。我只需要定义变量的类型。请参阅我上面的评论。

标签: python-2.7 docstring


【解决方案1】:

我不认为你可以通过 docstring 来做到这一点,但是有一种机制叫做 annotation。您可以在冒号: 后面附加任何您想要参数的表达式,并使用箭头-> 附加到函数声明本身。例如:

def getInstance(param: str) -> MyClass
    return some_var

为了便于说明,我在这里添加了一个输入参数。在这种情况下,str 和 MyClass 是分别表示预期输入和返回类型的对象。它们永远不会直接在您的代码中使用,只是隐藏在 func_annotations 属性中,供关心这类事情的最终用户(如编辑器)使用。

【讨论】:

  • 感谢您的回答。但我怎么知道它只适用于 python 3。是真的吗?类似的方式 - 在每个参数的文档中使用:type。但有时指定变量的实例很方便(特别是如果你不能更改被调用的函数的文档字符串)。
【解决方案2】:

你可以像类的描述属性那样做。这里的例子:

from example_module import MyClass

var = get_instance()
"""
:type var: MyClass
"""

你也可以像这样使用描述而不导入:

var = get_instance()
"""
:type var: example_module.MyClass
"""

第二种方式是使用PEP 484:

test = my()  # type: dict

Pycharm 中的自动完成示例:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-27
    • 2016-05-07
    • 2014-12-31
    • 1970-01-01
    • 1970-01-01
    • 2020-09-19
    相关资源
    最近更新 更多