#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. Я не могу поднять голос. Я принимаю этот ответ, потому что это единственный ответ, и он дает решение. Тем не менее, я продолжал фактически использовать метод класса.