Python类型推断用于自动补全

10 投票
4 回答
1209 浏览
提问于 2025-04-15 14:36

有没有办法用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 个回答

1

要想好好解决这个问题,就需要给Python设计一个类型系统,这其实是个很有意思的研究课题。

2

你可以看看在Pharo Smalltalk中提到的ECompletion和OCompletion。这些功能在Python中可能会有所不同,但通过一些保守的类型推断,做出合理的猜测在实际中是可行的。你还需要考虑你希望自动补全是用来替代浏览代码或文档,还是帮助你输入,避免打错字。

在Pharo中,如果你发送的消息是明确指向某个类的(比如SomeClass m),那么系统自然会建议这个类及其父类中的所有消息。如果不是,它就会根据你输入的前缀猜测系统中所有匹配的方法名,这样也能很好地工作。OCompletion则在此基础上,增加了一些根据编辑历史的优先级判断。

9

这段讨论非常棒,里面有很多有用的信息,可以在这里找到(虽然有点旧)。我觉得现在没有哪个“正式”的编辑器会很积极地使用类型推断来帮助自动补全(不过我有一段时间没用过比如说wingware的编辑器,所以也许他们现在有在做这件事)。

撰写回答