为什么PyDev在调用类方法时需要一个对象来代替Self?

时间:2017-07-28 15:31:34

标签: python eclipse parameters self method-call

所以我是Python的新手,但我已经看到了最近流行的语言,所以我决定尝试一下并学习语言。我开始使用PyCharm IDE开发一个简单的ArrayList,我完全没有任何问题。现在我决定使用Eclipse的PyDev插件来创建一个二元搜索树的新项目。我在使用PyDev时遇到的问题是,当我创建一个使用Self关键字作为参数之一的类方法时,PyDev实际上似乎要求我在被调用方法的参数中放置一个对象。下面是一个例子:

def addNode(self, data):
    if(self.__root):
        self.__addNode(self, self.__root, data)
    else:
        self.__root = TreeNode(data)

    self.__size += 1
    self.printTree(self, self.__root)    

def __addNode(self, node, data):
    if(data != None and node != None):
        if(data <= node.getData()):
            if(node.getLeftChild() == None):
                node.setLeft(TreeNode(data))
            else:
                self.__addNode(node.getLeftChild, data)
        else:
            if(node.getRightChild() == None):
                node.setRight(TreeNode(data))
            else:
                self.__addNode(node.getRightChild(), data)

如果我运行以下代码:

bst = BinarySearchTree
bst.addNode(5)
bst.addNode(4)
bst.addNode(6)

我得到以下输出:

Traceback (most recent call last):
  File "C:\Users\------\workspace\BinarySearchTree\Main.py", line 9, in <module>
    bst.addNode(5)
TypeError: addNode() missing 1 required positional argument: 'data'

但如果我改为运行此代码:

bst = BinarySearchTree
bst.addNode(bst,5)
bst.addNode(bst,4)
bst.addNode(bst,6)

我得到了我要找的输出:

5 
4 5 
4 5 6 

所以我的问题是为什么当PyCharm没有给我这个问题时,PyDev在调用类方法时需要一个对象代替self?我有两个IDE使用相同的解释器。

1 个答案:

答案 0 :(得分:3)

您尚未实例化BST对象。要在Python中执行此操作,您需要调用类:

bst = BinarySearchTree()

使用您的代码,您在类本身上调用方法,而不是在实例上调用。