python中的类方法可以调用实例方法吗?

问题描述 投票:0回答:1

我正在学习一个二进制树的编程,我想检查一个给定的数字是否已经在树中,所以当我试图添加相同的数字时,它停止了。

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方面的新手,我正在学习编程一个二进制树,我想检查一个给定的数字是否已经在树上,所以当我尝试添加相同的数字时,它就停止了。

python oop
1个回答
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

... 虽然你 真的 应该有充分的理由这样做。如果你的 类方法 取决于 实例那它就不是真正的类方法。


1
投票

你想做的事情是没有意义的。你是想找一个数字 n 在特定的树上,这是一个实例,那么它是一个类方法是什么意思呢?

© www.soinside.com 2019 - 2024. All rights reserved.