Как вызвать метод класса в пространстве имен того же класса в Python 3.x - PullRequest
0 голосов
/ 11 ноября 2019

При работе с экземплярами Python можно получить доступ к связанным методам того же класса, используя self. Это разрешает метод, соответствующий тому же классу в иерархии.

class A:
    def f(self):
        return 1

    def __init__(self):
        self.v = self.f()

class B(A):
    def f(self):
        return 2

b = B()
# b.v is set to 2

Но при работе с методами класса не существует очевидного способа доступа к методам того же класса, что и выше.

В моем случае f выше должно быть методом класса, и мне нужно установить переменную класса v в соответствии с f, соответствующей тому же классу. Примерно так:

class A:
    @classmethod
    def f(cls):
        return 1

    v = resolution_of_calling_class.f()

class B(A):
    @classmethod
    def f(cls):
        return 2

# B.v should be 2

edit : v на самом деле является атрибутом, определенным родительским классом, который должен найти метод, переопределенный дочерним классом

1 Ответ

0 голосов
/ 11 ноября 2019

Я не уверен на 100%, что понимаю, что вы пытаетесь сделать.

Я использовал ваш код выше, а

class A:
    @classmethod
    def f(cls):
        return 1

class B:
    @classmethod
    def f(cls):
        return 2

print(B.f())

дает мне 2, как я и ожидал. Должен ли B быть дочерним классом A, как в первом примере?

...