Python PyCharm中未自动完成的类方法列表
我是python新手,我有一个关于使用Pycharm自动完成列表中对象的方法调用的问题 我有一个名为foo()的类: 然后,我创建一个名为Python PyCharm中未自动完成的类方法列表,python,pycharm,Python,Pycharm,我是python新手,我有一个关于使用Pycharm自动完成列表中对象的方法调用的问题 我有一个名为foo()的类: 然后,我创建一个名为myList的列表,并在其中附加一个foo()对象。由于某种原因,当我尝试调用该对象时,该方法没有出现 但是,如果我使用print(myList[0].getNum())完成代码,它确实会打印出10 另外,如果我简单地创建一个变量x并将其分配给foo()对象,它将显示如下: 我试图创建一个y变量,并将其分配给myList[0]以查看是否可以显示该方法,但仍
myList
的列表,并在其中附加一个foo()
对象。由于某种原因,当我尝试调用该对象时,该方法没有出现
但是,如果我使用print(myList[0].getNum())
完成代码,它确实会打印出10
另外,如果我简单地创建一个变量x
并将其分配给foo()
对象,它将显示如下:
我试图创建一个y
变量,并将其分配给myList[0]
以查看是否可以显示该方法,但仍然没有成功
这只是一个IDE问题,还是在使用列表中的对象进行方法调用时,我缺少了一个更大的图景。我很确定这是一个IDE问题,因为在实际运行之前,它可能不会一直跟踪变量到其原始调用。因此,将x直接设置为foo()是一个赋值,但设置y=myList[0],然后在myList[0]获取对象,如果这样做有意义的话,这将是对变量的另一次调用。我很确定这是一个IDE问题,因为在实际运行之前,它可能不会一直跟踪变量的原始调用。因此,将x直接设置为foo()是一个赋值,但设置y=myList[0],然后在myList[0]处获取对象,这将是对变量的另一个调用,如果这有意义的话。原因是python具有动态类型。myList不能只包含foo对象。所以PyCharm不知道myList[0]是一个foo,它可以为您提供foo的自动完成功能(只有在运行时才知道) 举个例子:
class foo(object):
def __init__(self):
self.num = 10
def getNum(self):
return self.num
class bar(object):
def __init__(self):
self.num = 10
def getNum2(self):
return self.num
myList = []
myList.append(foo())
myList.append(bar())
print(myList[0])
PyCharm不知道是为foo()还是bar()提供自动完成功能,所以它也不提供
关于x的最后一个例子之所以有效,是因为您显式地将x指定为foo对象,因此Pycharm知道并为您提供foo的自动完成功能。原因是python具有动态类型。myList不能只包含foo对象。所以PyCharm不知道myList[0]是一个foo,它可以为您提供foo的自动完成功能(只有在运行时才知道) 举个例子:
class foo(object):
def __init__(self):
self.num = 10
def getNum(self):
return self.num
class bar(object):
def __init__(self):
self.num = 10
def getNum2(self):
return self.num
myList = []
myList.append(foo())
myList.append(bar())
print(myList[0])
PyCharm不知道是为foo()还是bar()提供自动完成功能,所以它也不提供
关于x的最后一个例子之所以有效,是因为您显式地将x指定为foo对象,因此Pycharm知道并为您提供了foo的自动完成功能。从python 3.5中,您可以使用它提供了Pycharm可以用来建议自动完成的高级键入功能
有关python 3.5的更多信息,请参见示例和
键入文档,您可以使用它提供pyCharm可用于建议自动完成的高级键入功能
有关更多信息,请参见示例和键入文档@NickWesenman谢谢。这为我消除了许多困惑。我唯一关心的是,如果您的程序规模变得非常大,并且您的类具有大量的方法,该怎么办。唯一的方法是在代码和类之间来回切换,看看其中有什么方法吗?您已经发现了使用动态类型语言的一个缺点。:)是的,我经常在另一个监视器上打开它,如果我必须经常引用它的话。你永远无法像IntelliJ(JetBrains版本的静态类型Java)那样自动完成代码。@NickWesenman谢谢。这为我消除了许多困惑。我唯一关心的是,如果您的程序规模变得非常大,并且您的类具有大量的方法,该怎么办。唯一的方法是在代码和类之间来回切换,看看其中有什么方法吗?您已经发现了使用动态类型语言的一个缺点。:)是的,我经常在另一个监视器上打开它,如果我必须经常引用它的话。您将永远无法获得IntelliJ(JetBrains版本的静态类型Java)提供的自动代码完成功能。感谢您的输入!谢谢你的意见!