4

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

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

if False:
    m = BaseMap(0,0,0)

在分配之后m和使用它之前。if 条件中的行永远不会被执行,但它声明m的是一个 BaseMap 类型的对象。

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

4

2 回答 2

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,但它会起作用(并且也不会受到伤害)。

于 2012-09-12T06:50:23.640 回答
0

这个问题类似于这篇文章:Eclipse pydev auto-suggestions don't work in some cases

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

于 2012-09-13T15:35:42.087 回答