Обновите переменные дочернего класса из базового класса

#python #class-variables

Вопрос:

Я хотел бы знать, существует ли способ обновления переменных класса у детей из базового/родительского. Есть ли способ для функции birthday обновить соответствующую переменную класса?

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

 class Animal():
    def __init__(self):
        pass

    def birthday(self):
        self.age = self.age   1


class Cat(Animal):
    age = 4


class Dog(Animal):
    age = 2


d = Dog()
print(Dog.age)
d.birthday()
print(Dog.age)
 

Комментарии:

1. Почему вы хотите age быть переменной класса, а не переменной экземпляра?

2. Если вам нужен атрибут общего класса, то birthday это должен быть метод класса , а не метод экземпляра.


Ответ №1:

Установите значение для класса.

 class Animal():
    def __init__(self):
        pass

    def birthday(self):
        self.__class__.age = self.__class__.age   1
        # shorter version:
        # self.__class__.age  = 1
 

Комментарии:

1. Зачем обращаться к нему через self.__class__.__age__ , когда вы могли бы просто сделать birthday classmethod ?

2. Я бы предпочел type(self).age в любом случае; обычно вы не хотите напрямую работать с атрибутами dunder.

3. Я не могу поднять голос. Я принимаю этот ответ, потому что это единственный ответ, и он дает решение. Тем не менее, я продолжал фактически использовать метод класса.