在python中动态获取类级变量的类名

时间:2013-07-15 19:16:34

标签: python class static-members

这个问题很简单,我试图让缩进符合可读性。我刚刚开始使用Python,这就是我现在所拥有的:

class BaseKlass():
  ....

class DerivedKlass1(BaseKlass):
  display_name = "DerivedKlass1"

class DerivedKlass2(BaseKlass):
  display_name = "DerivedKlass2"

基本上所有派生类都有

  

带有类名硬编码的display_name变量。

我想要的是在BaseKlass中设置display_name并从子类中删除display_name声明,如下所示:

class BaseKlass():
  display_name = <some way to set the display name to callee class name>

class DerivedKlass1(BaseKlass):
  ....

class DerivedKlass2(BaseKlass):
  ....

因此DerivedKlass1.display_name应返回“DerivedKlass1”,DerivedKlass2.display_name应返回“DerivedKlass2”。

我知道我遗漏了一些非常明显的东西,我期待很多RTFM评论,但无论我想要的是学习如何动态地将python类名称设置为类级别属性。如果你愿意的话,可以随意对这个帖子投票,但如果你也给我一个答案,我会很感激。

谢谢,

1 个答案:

答案 0 :(得分:6)

您可以使用

访问对象的类名
obj.__class__.__name__

创建实例后,您需要这样做。最直接的方式是

class MyClass:

    def __init__(self):
        self.display_name = self.__class__.__name__

您也可以使用元类自动设置它,但我不认为它值得这么麻烦,而且我不记得那些工作现在是什么。