PyCharm:指定返回变量的类型?

时间:2016-04-21 16:03:45

标签: python oop autocomplete pycharm

如何让PyCharm了解返回变量的完成情况?

根据https://www.jetbrains.com/help/pycharm/5.0/type-hinting-in-pycharm.html

我断言变量的类型,但没有得到任何完成。

import boto.kinesis
x = boto.kinesis.connect_to_region("us-west-2")
assert isinstance(x, boto.kinesis.layer1.KinesisConnection)

foo = x.    <--- not getting completions here

enter image description here

Python 2,7,PyCharm Community Edition 2016.1.2

2 个答案:

答案 0 :(得分:1)

这与Cannot find reference 'xxx' in __init__.py - Python / Pycharm以及__init__.py inside the boto.kinesis package内未定义__all__的事实有关。

直接从KinesisConnection导入boto.kinesis.layer1,这对我有用:

import boto.kinesis
from boto.kinesis.layer1 import KinesisConnection

x = boto.kinesis.connect_to_region("us-west-2")
assert isinstance(x, KinesisConnection)

enter image description here

您也可以导入它并在评论中添加type提示:

import boto.kinesis
from boto.kinesis.layer1 import KinesisConnection

x = boto.kinesis.connect_to_region("us-west-2")  # type: KinesisConnection

enter image description here

答案 1 :(得分:1)

(PyCharm Developer通过JetBrains支持回复)

正如@alexce所指出的,潜在的问题是PyCharm无法解析<%= week.send field.to_sym %> 引用,因此无法解析boto.kinesis.layer1的符号。

通常,您不能以这种方式引用包的子模块(不显式导入它们)。如果PyCharm允许它,当忘记添加必要的import语句时会有大量的误报错误。但由于这种情况非常常见,我们会通过boto.kinesis.layer1.KinesisConnection查看boto/kinesis/__init__.py可能已包含属性sys.modules['boto.kinesis']的一些迹象。

以下任何内容都可以:

layer1

实际上from boto.kinesis import layer1 from . import layer1 from boto.kinesis.layer1 import KinesisConnection import boto.kinesis.layer1 'layer1' in __all__ 确实包含这些import语句中的第三个,但是在函数内部:

__init__.py

由于我们不能静态地保证在运行时调用此函数,除了警告编辑器中未解析的引用之外,我们除此之外别无其他。