访问子类父级中的重写类变量

时间:2014-07-11 08:49:10

标签: python

如何访问我希望替换子类的类变量?

这就是我想要的原因:

class Foo():
    var = "Foo"
    @staticmethod
    def print_var():
    print(Foo.var)

class Bar(Foo):
    var = "Bar"

>> Bar.print_var()
>> "Bar

上面的代码打印" Foo"而不是" Bar"

2 个答案:

答案 0 :(得分:2)

不要使用staticmethod至少在这里使用@classmethod decorator

class Foo():
    var = "Foo"

    @classmethod
    def print_var(cls):
        print(cls.var)

class Bar(Foo):
    var = "Bar"

这使得print_var可以在课程中访问,但会传递对当前课程的引用,因此您可以在'右侧'上查找var。对象

仅当您要从方法中删除所有上下文,再次将其转换为常规函数时,才使用staticmethod

演示:

>>> class Foo():
...     var = "Foo"
...     @classmethod
...     def print_var(cls):
...         print(cls.var)
... 
>>> class Bar(Foo):
...     var = "Bar"
... 
>>> Bar.print_var()
Bar
>>> Foo.print_var()
Foo

答案 1 :(得分:2)

使用classmethod

class Foo():
    @classmethod
    def print_var(cls):
        print(cls.var)