gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 01:49:35 25 4
gpt4 key购买 nike

我刚刚学习了如何在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com