例如,假设我有代码:
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对象的智能感知器。
答案 0 :(得分:2)
如果你只是def goo(self, foo):
没有人打电话,那就无法知道foo
的类型。但是,如果您使用已知goo
在代码中调用Foo
,则IDE可以确定goo
始终传递Foo
并且自动填充功能可以正常工作。这就是Python Tools for Visual Studio的工作原理。
请注意,这并不是非常有用,因为它要求您在实际编写该函数之前编写调用函数的代码。这是一个片段,表明如果你明白它是有效的:
答案 1 :(得分:0)
看看Jetbrains的PyCharm。当引用变量的名称与类名称匹配(不区分大小写)时,它可以在实例上自动完成方法名称。
http://www.jetbrains.com/pycharm/
这里有很好的截图(向下滚动并点击左边的第三张图片):
http://www.jetbrains.com/pycharm/features/index.html
我应该提一下这个功能是有限的(因为Python是动态类型的),但它比我尝试过的任何其他Python IDE都要好。这一点,以及许多其他伟大的功能使它成为我选择的PyCharm IDE。