如何在PyDev中声明变量类型?

4
假设有一组从BaseMap继承的类Map1、Map2、Map3等,我使用一些反射机制来获取子Map的实例。我想要动态地获取其中一个类的实例并将其存储在变量“m”中,并使pydev识别其类型为BaseMap,以便我可以在其上使用代码补全。
我发现一种解决方案是添加以下代码:
if False:
    m = BaseMap(0,0,0)

在分配m之后,在使用它之前。if条件内的语句将永远不会被执行,但它声明了m是一个BaseMap类型对象。
这看起来很傻,但它确实有效。还有其他方法可以做到这一点吗?

可能是Pydev Code Completion for everything的重复问题。那个问题的答案更完整和最新,包括不需要断言的sphinx :type m: BaseMap注释。 - Joshua Taylor
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”,但它可以工作(而且也不会损坏)。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接