在我的主方法中,当我尝试测试我的插入函数时,在三次插入后,该函数突然抛出一个错误,指出它未定义。
我真的不确定该怎么做。我的假设是,它与被封顶的函数的空间有关,因此编译器无法继续执行其余操作,
而不是继续。class MerkleTree:
def __init__ (self, rootHash, rootNode):
self.rootHash = rootHash
self.rootNode = rootNode
root = MerkleTree(None, None)
class MerkleNode():
def __init__ (self, value, left, right, leafValue):
self.value = value
self.left = left
self.right = right
self.leafValue = leafValue
class Entry():
def __init__ (self, key, value):
self.key = key
self.value = value
class MerkleTreeInterface:
#recursive Insert Helper
def insertHelp(self, root, node):
if (root.rootNode.right != None):
insertHelp(root.rootNode.right, node)
else:
root.rootNode.right = node
#insert function, finds the appropriate available slot to insert data
def insert(self, key, value):
entry = Entry(key, value)
node = MerkleNode(value, None, None, entry)
if(root.rootNode == None):
root.rootNode = node
else:
if(root.rootNode.left == None):
root.rootNode.left = node
elif(root.rootNode.right == None):
root.rootNode.right = node
else:
insertHelp(root, node)
class main():
tree = MerkleTreeInterface()
tree.insert("b", 2)
tree.insert("a", 1)
tree.insert("c", 3)
tree.insert("d", 4)
预期的结果是简单地插入所有内容(因此在这种情况下,当我遍历它时,列表应该是 [a,b,c,d](我只想要键(,但在第 4 次插入时,发生了错误。这是日志:
Traceback (most recent call last):
File "/Users/User/Desktop/temp.py", line 75, in <module>
class main():
File "/Users/User/Desktop/temp.py", line 81, in main
tree.insert("d", 4)
File "/Users/User/Desktop/temp.py", line 42, in insert
insertHelp(root, node)
NameError: name 'insertHelp' is not defined
[Finished in 0.8s with exit code 1]
- 在
insertHelp
方法中,insertHelp(root.rootNode.right, node)
应该是self.insertHelp(root.rootNode.right, node)
的。 - 在
insert
方法中,应self.insertHelp(root, node)
insertHelp(root, node)
。
执行以下命令时未收到此错误:
tree.insert("b", 2)
tree.insert("a", 1)
tree.insert("c", 3)
因为他们没有执行insertHelp(root, node)
.但:
tree.insert("d", 4)
尝试执行该语句,但出现错误。
由于insertHelp
方法是一个实例方法,我们需要使用self.insertHelp
来访问它。
搜索Python instance method vs Static method vs Class method
以清楚地理解它。