Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否存在一个Python IDE,允许人们模拟类似C的intellisense来自动完成对象上的方法调用?_Python - Fatal编程技术网

是否存在一个Python IDE,允许人们模拟类似C的intellisense来自动完成对象上的方法调用?

是否存在一个Python IDE,允许人们模拟类似C的intellisense来自动完成对象上的方法调用?,python,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 我非常希望

例如,假设我有以下代码:

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类的可用方法、它们的参数、它们的doc等等

在C#中,我必须声明参数'foo'是'foo'类型,因此自动补全很简单

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

我发现的一个解决方法是键入
Foo.
,这将导致大多数IDE显示Foo中方法的intellisense。这是有用的,但它不是我想要的

另一种解决方法是键入
foo=foo()
,然后像往常一样使用foo。一些IDE嗅探到foo是foo类型并提供intellisense。但是,您必须记住删除行
foo=foo()
,否则您会遇到一个严重的错误


也许,有一个更好的方法来完成我想做的事情。我正在使用C#intellisense作为参考点,这可能是Visual Studio的事情,而在编写Python时,我应该敞开心扉,用不同的方式完成类似的事情。如有任何建议,将不胜感激。我肯定我不是唯一一个渴望Python对象智能感知的人。

如果你只有
def-goo(self,foo):
没有人调用它,就无法知道
foo
将是什么类型。但是,如果使用已知的
Foo
在代码中调用
goo
,IDE会发现
goo
总是被传递一个
Foo
,并且自动完成可以工作。这就是工作原理


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

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

这里的屏幕截图不错(向下滚动并单击左侧的第三幅图像):

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