我正在学习一个二进制树的编程,我想检查一个给定的数字是否已经在树中,所以当我试图添加相同的数字时,它停止了。
class Node:
exist = True
@classmethod
def num_exist(cls, n):
cls.exist = cls.find(n)
def find(self, n):
if n != self.value:
if n < self.value:
if self.right != None:
self.right.find(n)
else:
return False
if n > self.value:
if self.left != None:
self.left.find(n)
else:
return False
else:
return self
def add(self, n):
self.num_exist(n)
if self.exist == False:
if n != self.value:
if n < self.value:
if self.right != None:
self.add(n)
else:
self.right = Node(n)
if n > self.value:
if self.left != None:
self.add(n)
else:
self.left = Node(n)
这里的问题是,当我调用函数 num_exist()
它给我以下错误。
TypeError: find() missing 1 required positional argument: 'n'
我想这个错误是因为 self
参数还没有传过来,但我不知道怎么做,也不知道能不能把函数的 find()
至 @classmethod
. 我是oop方面的新手,我正在学习编程一个二进制树,我想检查一个给定的数字是否已经在树上,所以当我尝试添加相同的数字时,它就停止了。
一个类方法可以调用实例方法吗?从技术上讲是可以的,只要你传入一个对该实例的引用。
class MyClass:
def __init__(self, a):
self.a = a
def print_a(self):
print(self.a)
@classmethod
def class_print_a(cls, inst):
inst.print_a()
my_instance = MyClass(a=1)
MyClass.class_print_a(my_instance) # output: 1
... 虽然你 真的 应该有充分的理由这样做。如果你的 类方法 取决于 实例那它就不是真正的类方法。
你想做的事情是没有意义的。你是想找一个数字 n
在特定的树上,这是一个实例,那么它是一个类方法是什么意思呢?