【发布时间】:2015-08-03 14:37:13
【问题描述】:
我正在作为具有类和子类的应用程序工作。对于每个类,无论是超级类还是子类,都有一个名为label 的类变量。我希望超类的 label 变量默认为类名。例如:
class Super():
label = 'Super'
class Sub(Super):
label = 'Sub'
是否可以从超类中的类名派生变量并为子类自动填充,而不是手动为每个类键入变量?
class Super():
label = # Code to get class name
class Sub(Super)
pass
# When inherited Sub.label == 'Sub'.
这样做的原因是这将是默认行为。我还希望,如果我能获得默认行为,我可以稍后通过指定备用 label 来覆盖它。
class SecondSub(Super):
label = 'Pie' # Override the default of SecondSub.label == 'SecondSub'
我尝试过使用__name__,但这不起作用,只给了我'__main__'。
我想在@classmethod 方法中使用类变量label。所以我希望能够引用该值,而不必实际创建 Super() 或 Sub() 对象,如下所示:
class Super():
label = # Magic
@classmethod
def do_something_with_label(cls):
print(cls.label)
【问题讨论】:
-
您应该指定您需要它来处理未实例化的类。你会很快得到一个更正确的解决方案
-
你说得对,我应该有。现在会解决这个问题。
标签: python python-3.x class-variables