如何在pydev中声明变量的类型?

时间:2012-09-12 06:15:57

标签: python pydev

假设有一组类Map1,Map2,Map3,...都是从BaseMap扩展的,我使用一些反射机制来获取子Map的实例。我想动态获取其中一个类的实例并将其存储在变量m中,并让pydev将该类型识别为BaseMap,以便我可以在其上使用单词完成。

我发现一个解决方案是添加代码

if False:
    m = BaseMap(0,0,0)
分配m之后和使用之前

。 if条件中的行永远不会被执行,但它声明m是BaseMap类型的对象。

这可能看起来很傻,但确实有效。还有其他办法吗?

2 个答案:

答案 0 :(得分:6)

您可以使用assert isinstance(...)在变量的pydev中获取自动完成,否则pydev将无法猜出正确的类型。

说出你的代码是:

m = getAttr(someThing, 'someAttr')
m.*no autocompletion*

pydev将无法知道m的类型,因此不会显示自动完成。

尝试:

m = getAttr(someThing, 'someAttr')
assert isinstance(m, BaseMap) # or whatever class it is
m.*pydev shows autocompletion*

它有些 hacky ,但它会起作用(也不会受到伤害)。

答案 1 :(得分:0)

此问题与此帖类似:Eclipse pydev auto-suggestions don't work in some cases

已经提出了一个很好的答案(使用断言)。另一种解决方案是使用this link中描述的构造函数。