Может ли метод класса вызвать метод экземпляра в python? - PullRequest
0 голосов
/ 28 мая 2020

Я учусь программировать двоичное дерево, и я хочу проверить, есть ли данное число уже в дереве, поэтому, когда я пытаюсь добавить тот же номер, он останавливается.

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. Я довольно новичок ie в oop.

Ответы [ 2 ]

1 голос
/ 28 мая 2020

Может ли метод класса вызывать метод экземпляра? Технически да, если вы передаете ссылку на этот экземпляр:

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 голос
/ 28 мая 2020

То, что вы пытаетесь сделать, не имеет смысла. Вы пытаетесь найти число n в заданном дереве , которое является экземпляром, так что для него значит быть методом класса?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...