Использование атрибутов уровня класса подкласса в функции родительского класса в Python - PullRequest
0 голосов
/ 22 мая 2018

Как я могу изменить соответствующие атрибуты уровня класса, используя функцию базового класса, не перегружая функцию?

class A:
    a = 0

    def addOne(self):
        print(A.a)      # prints 0
        A.a = A.a + 1
        print(A.a)      # it stores the value of a over all the child classes

class B(A):
    a = 0
    print(A.a)      # prints 0
    print(B.a)      # prints 0
    self.addOne()
    print(A.a)      # prints 1
    print(B.a)      # prints 0

Class C(A):
    a = 0
    print(A.a)      # prints 1
    print(C.a)      # prints 0
    self.addOne()
    print(A.a)      # prints 2
    print(C.a)      # prints 0

Я хочу B.a = 1 и C.a = 1 после self.addOne().

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

1 Ответ

0 голосов
/ 22 мая 2018

Опция 1: Используйте функцию type, чтобы получить класс self.

def addOne(self):
    cls = type(self)
    cls.a += 1

Опция 2: Преврати addOne в classmethod:

@classmethod
def addOne(cls):
    cls.a += 1
...