是否存在允许人们模拟类似C#的intellisense以对对象进行自动完成方法调用的Python IDE?

时间:2011-09-28 03:48:22

标签: python

例如,假设我有代码:

class Foo(object):
  def bar(self, x):
    '''blah blah blah'''
    return x+1

假设我正在创建另一个类,它有一个方法,它接受一个Foo对象的实例并执行某些操作:

class Baz(object):
  def goo(self, foo):
    foo.bar(1) ### I am a 'Foo' object. Auto-complete me, please

如果在Baz类中创建goo()方法后键入foo.,我会非常喜欢,IDE会为我提供intellisense。你知道,展示Foo类的可用方法,它们的参数,它们的文档等等。

在C#中,我必须声明param'foo'是'Foo'类型,因此自动完成是微不足道的。

我意识到Python是动态类型的,因此任何IDE都无法知道'foo'参数的类型为Foo。但是有一些其他信息,指令或约定,某些IDE可以用来确定类型......严格来说是为了智能感知和自动完成?

我找到的一种解决方法是键入Foo.,这将导致大多数IDE显示Foo中方法的智能感知。这很有用,但这并不是我想要的。

另一种解决方法是键入foo = Foo(),然后像往常一样使用foo。一些IDE嗤之以鼻,foo是Foo类型并提供intellisense。但是你必须记住删除行foo = Foo(),否则你会有一个讨厌的错误。

也许,有一种更好的方法来完成我想要做的事情。我使用C#intellisense作为参考点,也许这是一个Visual Studio的东西,而在编写Python时,我应该打开我的想法,以一种不同的方式来完成类似的事情。任何建议将不胜感激。我确信我不能成为唯一一个渴望Python对象的智能感知器。

2 个答案:

答案 0 :(得分:2)

如果你只是def goo(self, foo):没有人打电话,那就无法知道foo的类型。但是,如果您使用已知goo在代码中调用Foo,则IDE可以确定goo始终传递Foo并且自动填充功能可以正常工作。这就是Python Tools for Visual Studio的工作原理。

请注意,这并不是非常有用,因为它要求您在实际编写该函数之前编写调用函数的代码。这是一个片段,表明如果你明白它是有效的:Autocomplete demonstration

答案 1 :(得分:0)

看看Jetbrains的PyCharm。当引用变量的名称与类名称匹配(不区分大小写)时,它可以在实例上自动完成方法名称。

http://www.jetbrains.com/pycharm/

这里有很好的截图(向下滚动并点击左边的第三张图片):

http://www.jetbrains.com/pycharm/features/index.html

我应该提一下这个功能是有限的(因为Python是动态类型的),但它比我尝试过的任何其他Python IDE都要好。这一点,以及许多其他伟大的功能使它成为我选择的PyCharm IDE。