用于自动完成的Python类型推断

时间:2009-09-25 15:34:36

标签: python algorithm ide haskell ocaml

是否可以使用类型推断的Ocaml / Haskell算法为Python建议更好的自动填充?

这个想法是建议自动完成,例如在以下情况下:

class A:
  def m1(self):
    pass
  def m2(self):
    pass

a = A()
a.     <--- suggest here 'm1' and 'm2'
fun1(a)

def fun1(b):
  b.   <--- suggest here 'm1' and 'm2'

有什么好的起点吗?

4 个答案:

答案 0 :(得分:9)

很好的讨论,有很多指针here(有点过时了)。我不相信任何“制作”编辑都会主动尝试使用类型推理来实现自动完成目的(但我有一段时间没有使用过例如翼软件,所以也许他们现在就这样做了。)

答案 1 :(得分:2)

您可以查看Pharo Smalltalk中的ECompletion和OCompletion。对于python来说,妥协可能会有所不同,但是在实践中通过一些保守类型推理进行有根据的猜测。这也取决于您是否希望完成替换浏览代码/文档,或帮助打字并避免拼写错误。

我认为在Pharo中,如果消息是对类(SomeClass m)的显式发送,那么它当然会提出该类及其超类中的所有消息。否则,它只是猜测系统中与类型前缀匹配的所有方法名称,并且效果很好。 OCompletion根据编辑历史添加了一些启发式优先级。

答案 2 :(得分:1)

第一种情况是“容易”,我打赌JetBrains' PyCharm可以做到这一点。我没有使用过PyCharm,但我确实使用了IDEA,也是JetBrains,用于基于Groovy的开发(一种动态语言),并且它具有非常好的,非常积极的自动完成功能。第二种情况会更困难,您希望IDE根据其用途推断fun1的类型。在没有泛型的语言中,这可能是合理的。但是,至少在F#/ VS2010中(这可能类似于OCaml / Haskell),编译器/ IntelliSense推断fun1具有签名'a -> 'a(即,一个通用的函数)键入'a并返回泛型类型'a),因此IntelliSense非常小。

答案 3 :(得分:0)

正确的处理方法需要Python的类型系统,这将是一个有趣的研究问题。