假设有一组类Map1,Map2,Map3,…都是从BaseMap扩展的,我使用一些反射机制来获取子Map的实例.我想动态获取其中一个类的实例并将其存储在变量m中,并让pydev将该类型识别为BaseMap,以便我可以在其上使用单词完成.
我发现一个解决方案是添加代码
if False:
m = BaseMap(0,0,0)
在分配m之后和使用它之前. if条件中的行永远不会被执行,但它声明m是BaseMap类型对象.
这可能看起来很傻,但确实有效.还有其他办法吗?
解决方法:
您可以使用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,但它会工作(也没有伤害).