如何访问我希望替换子类的类变量?
这就是我想要的原因:
class Foo():
var = "Foo"
@staticmethod
def print_var():
print(Foo.var)
class Bar(Foo):
var = "Bar"
>> Bar.print_var()
>> "Bar
上面的代码打印" Foo"而不是" Bar"
答案 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)