类方法可以在python中调用实例方法吗?
我正在学习编程一个二叉树,我想检查一个给定的数字是否已经在树中,所以当我尝试添加相同的数字时,它会停止类方法可以在python中调用实例方法吗?,python,oop,Python,Oop,我正在学习编程一个二叉树,我想检查一个给定的数字是否已经在树中,所以当我尝试添加相同的数字时,它会停止 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:
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)
我想这个错误是因为没有传递
self
参数,但我不知道如何做,或者是否可以将函数find()
传递给@classmethod
。我是oop的新手。你想做的没有意义。您试图在一个给定的树中找到编号n
,这是一个实例,那么它作为一个类方法意味着什么呢?您试图做的事情毫无意义。您试图在给定的树中找到编号n
,这是一个实例,那么它作为类方法意味着什么呢?类方法可以调用实例方法吗?技术上是的,只要您传入对该实例的引用:
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
。。。虽然你确实应该有一个很好的理由这样做。如果您的类方法依赖于某个特定实例,那么它就不是真正的类方法。类方法可以调用实例方法吗?技术上是的,只要您传入对该实例的引用:
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
。。。虽然你确实应该有一个很好的理由这样做。如果你的类方法依赖于一个特定的实例,那么它就不是一个真正的类方法。当方法的结果明显依赖于被轮询的实例的状态时,使
num\u exist
成为一个类方法的原因是什么?是的,如果你有一个类实例的引用。但是,除非将类方法作为显式参数传递,否则类方法通常不会。当方法的结果明显取决于被轮询实例的状态时,num_exist
classmethod的原因是什么?是的,如果您引用了类的实例。但是,除非您将一个类方法作为显式参数传递,否则类方法通常不会这样做。您是对的,确实没有意义。谢谢你的回答!你说得对,真的没道理。谢谢你的回答!