在父级的静态方法中使用子级的静态变量

时间:2019-09-14 23:03:09

标签: python-3.x static-methods

我目前正在尝试抽象/默认一些行为。所有子代以不同的方式定义一些常量,我想在其父类中引用所述变量。我的尝试看起来像这样:

class Mother():
    a= True

    @staticmethod
    def something():
        return Mother.a


class Child(Mother):
    a = False


print(Mother.something())
print(Child.something())

Mother.something()显然会产生True,但是Child.something()应该会产生False

这不起作用,因为我猜想在Python继承中您不会覆盖变量,而只是将它们隐藏在视觉范围之外?

1 个答案:

答案 0 :(得分:1)

Child类中,当调用something时,Mother.a仍然有效,您是指父Mother类(在{{1}处定义) }的类声明)。对于您的用例,Python还有另一个名为classmethod的内置函数:

Child

从文档中

  

类方法不同于C ++或Java静态方法。如果需要这些,请参见staticmethod()。

class Mother(): a = True @classmethod def something(cls): return cls.a class Child(Mother): # Mother.a gets defined here a = False print(Mother.something()) # True print(Child.something()) # False 定义@classmethod(按照惯例,该变量不必称为cls)作为第一个参数,就像实例方法将接收cls一样作为他们的第一个论点。 self表示正在调用该方法的类。

我建议this video很好地介绍类的最佳做法,以及如何/在哪里使用python中的所有特殊修饰符/语法。

由于您提到了抽象类,因此您可能也对abc模块感兴趣。