【问题标题】:Why does PyDev require an object in place of Self when calling a class method?为什么 PyDev 在调用类方法时需要一个对象来代替 Self?
【发布时间】:2017-07-28 23:36:47
【问题描述】:

所以我是 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 都使用相同的解释器。

【问题讨论】:

    标签: python eclipse parameters self method-call


    【解决方案1】:

    您尚未实例化 BST 对象。要在 Python 中做到这一点,您需要 调用 类:

    bst = BinarySearchTree()
    

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

    【讨论】:

    • 巴哈哈哈哈,哇有时候我遇到的问题太简单了。我以为我看到了一个没有打开/关闭括号的构造函数没有参数的类的示例,但我想我没有完全理解代码的上下文,谢谢你的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-27
    • 1970-01-01
    • 2014-02-16
    • 1970-01-01
    • 1970-01-01
    • 2014-09-19
    • 2016-08-12
    相关资源
    最近更新 更多