python - 类方法找不到给定的参数

标签 python

我刚刚学习了如何在 C# 中创建二叉搜索树。我决定尝试在 Python 3.x 中编写同样的代码。但是,当我进入 Print 方法时,出现了此错误:

Traceback (most recent call last):
  File "C:\Users\danie\Desktop\Python\BinarySearchTree\BinarySearchTree\BinarySearchTree.py", line 62, in <module>
    b.BSTprint()
  File "C:\Users\danie\Desktop\Python\BinarySearchTree\BinarySearchTree\BinarySearchTree.py", line 46, in BSTprint
    BST.Print(current)
TypeError: Print() missing 1 required positional argument: 'cur'

问题是,我确实输入了所需的位置参数。我尝试自己修复它,发现如果删除 self 参数,它就可以工作。但是,我一直认为您需要在所有类方法中都有该 self 参数。我不知道出了什么问题。这是代码

import random
class BST:
    #Node class 
    class Node:
        data = None
        left = None
        right = None
        def __init__(self, d):
            self.data = d
    first = None
    #Add method
    def Add(self, d):
        #Checks if the Binary Search Tree is empty
       if(BST.first == None):
           BST.first = BST.Node(d)
           #Debugging purposes
           #print("Added: {}".format(d))
           return;
       else:
           newNode = BST.Node(d)
           cur = BST.first
           while(cur != None):
               if(cur.data < newNode.data):
                   if(cur.left == None):
                       cur.left = newNode
                       #print("Added: {}".format(newNode.data))
                       return
                   else:
                       cur = cur.left
               elif(cur.data > newNode.data):
                   if(cur.right == None):
                       cur.right = newNode
                       #print("Added: {}".format(newNode.data))
                       return
                   else:
                       cur = cur.right
               else:
                    print("Value already in BST")
                    return


    def BSTprint(self):
        current = BST.first
        if(current == None):
            return
        BST.Print(current)
    def Print(self, cur):

        if(cur.left != None):
            BST.Print(cur.left)
        print(cur.data)
        if(cur.right != None):
            BST.Print(cur.right)



b = BST()
#Adds values into BST
for i in range(10):
    x = random.randint(1,100)
    b.Add(x)
b.BSTprint()

最佳答案

您混淆了类变量和实例变量。

在 Python 中,方法的第一个参数是为调用对象保留的(除非在某些情况下不是,例如在类方法或静态方法中)。像这样修改 Add 方法:

class BST:
...
    def Add(self, d):
        if self.first is None:
            self.first = BST.Node(d)
            return
    ...

请注意,BST.Node(d) 仍然是相同的,因为我指的是属于该类的东西:另一个类。

修改BST.Print(current)self.Print(current)

将 BST 的根节点称为 first 并不常见,更喜欢使用 root!

关于python - 类方法找不到给定的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50867848/

相关文章:

python - 如何从预定义 block 构建正则表达式

python - while (1) vs. while(True) -- 为什么有区别(在 python 2 字节码中)?

python - 函数中静态变量的 Python 等价物是什么?

python - 重命名 MultiIndex Pandas Dataframe 的名称

python - Hadoop MapReduce Wordcount python执行错误

python - Tastypie : Usage of the XML aspects requires lxml and defusedxml

python - Django Rest Framework 外键嵌套

python - 取方阵的方子矩阵?

python - Keras 训练在多次正确执行后崩溃

python - 使用Python计算使用五个点的唯一圆锥截面