Pycharm Intellisense用于自定义类令人惊讶的行为

时间:2018-03-08 14:53:48

标签: python pycharm

最近,我使用pycharm来实现一些简单的算法。 但我发现了一个相当令人惊讶的事实。

这是我的代码

def main():
n = Node(2)
n.nextNode=Node(1)

def TraverseNodes(node):
    if node.nextNode = None
        print(node.num)
    else:
        print(node.num)
        TraverseNodes(node.nextNode)

class Node():
    nextNode = None
    num = None
    def __init__(self,num):
        self.num = num
    def appendNext(self,next):
        self.nextNode=next

main()

据我所知,python是一种动态类型语言,这意味着该类型在运行时被解释。

所以pycharm不应该知道"节点" TrasverseNode方法中的参数属于。

但是当我真正写出方法的细节时,intellisense似乎能够推断出类型是节点?! enter image description here

(我尝试了不同的参数名称,只有"节点"可能导致这种行为,其他人可以&#t; t。这是否意味着pycharm可以通过名称中的相似性来推断类型?)

非常感谢。

1 个答案:

答案 0 :(得分:2)

是。如果你有一个变量和一个与变量同名但是大写的类,PyCharm会假设变量可能是该类的一个实例,并在完成弹出窗口中建议该类的成员。

(这仅影响完成 - 例如,如果您访问未在此类中定义的成员,则不会显示警告。)