【问题标题】:Update child class variables from base class从基类更新子类变量
【发布时间】:2021-10-14 22:32:40
【问题描述】:

我想知道是否存在从基/父更新子类变量的方法。生日函数有没有办法更新适当的类变量?

我知道在这个例子中正确的做法可能是让 age 成为一个实例变量。但我有一个案例,我想坚持将年龄作为一个类变量。

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)

【问题讨论】:

  • 为什么要将age 用作类变量,而不是实例变量?
  • 如果你确实想要一个共享的类属性,那么birthday应该是一个方法,而不是一个实例方法。

标签: python class-variables


【解决方案1】:

在类上设置值。

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

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

【讨论】:

  • 既然可以将birthday 变成classmethod,为什么还要通过self.__class__.__age__ 访问它?
  • 无论如何我更喜欢type(self).age;您通常不想直接使用 dunder 属性。
  • 我不能投票。我接受这个答案,因为它是唯一的答案,它提供了一个解决方案。但是,我继续实际使用类方法。
猜你喜欢
  • 2013-01-16
  • 2023-03-15
  • 1970-01-01
  • 2014-10-06
  • 2021-05-05
  • 2011-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多