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

用于自动完成的Python类型推断,python,algorithm,ide,haskell,ocaml,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' A类: def m1(自):

是否可以使用类型推断的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'
A类:
def m1(自):
通过
def m2(自):
通过
a=a()

a 非常好的讨论,有很多建议,(有点过时)。我不相信任何“产品”编辑器会出于自动完成的目的而积极尝试类型推断(但我已经有一段时间没有使用wingware了,所以现在可能已经使用了)。

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

您可以在中查看ECompletion和OCompletion。对于python来说,折衷方案可能会有所不同,但在实践中,通过一些保守的类型推断工作进行了有根据的猜测。这还取决于您是否希望完成以取代对代码/文档的浏览,或者是否希望帮助键入并避免键入错误


我认为在Pharo中,如果消息是显式发送给类(
SomeClass m
),那么它当然会建议该类及其超类中的所有消息。否则,它只会猜测系统中与类型化前缀匹配的所有方法名称,并且效果良好。OCompletion增加了一点基于编辑历史的启发式优先顺序。

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

Alex post中提到的大多数讨论都与编译/执行所需的100%准确性有关。但对于自动完成来说,好的猜测就足够了,也许它应该简化问题?据我回忆,wing ide提供了一些完成。但我已经有一段时间没用了,所以我不确定