为什么 PyDev 在调用 class 方法时需要一个对象来代替 Self?
Why does PyDev require an object in place of Self when calling a class method?
所以我是 Python 的新手,但我看到最近这门语言很受欢迎,所以我决定尝试一下并学习这门语言。我首先使用 PyCharm IDE 开发了一个简单的 ArrayList,我完全没有遇到任何问题。现在我决定将 PyDev 插件用于 Eclipse 的新项目,即二叉搜索树。我在 PyDev 中 运行 遇到的问题是,当我创建一个 class 方法并将 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
所以我的问题是为什么 PyDev 在调用 class 方法时似乎需要一个对象来代替 self 而 PyCharm 没有给我这个问题?我有两个 IDE 使用相同的解释器。
您还没有实例化 BST 对象。要在 Python 中做到这一点,您需要 调用 class:
bst = BinarySearchTree()
使用您的代码,您是在 class 本身而不是实例上调用方法。
所以我是 Python 的新手,但我看到最近这门语言很受欢迎,所以我决定尝试一下并学习这门语言。我首先使用 PyCharm IDE 开发了一个简单的 ArrayList,我完全没有遇到任何问题。现在我决定将 PyDev 插件用于 Eclipse 的新项目,即二叉搜索树。我在 PyDev 中 运行 遇到的问题是,当我创建一个 class 方法并将 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
所以我的问题是为什么 PyDev 在调用 class 方法时似乎需要一个对象来代替 self 而 PyCharm 没有给我这个问题?我有两个 IDE 使用相同的解释器。
您还没有实例化 BST 对象。要在 Python 中做到这一点,您需要 调用 class:
bst = BinarySearchTree()
使用您的代码,您是在 class 本身而不是实例上调用方法。