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

spl*_*ell 8 python class static-members

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

class BaseKlass():
  ....

class DerivedKlass1(BaseKlass):
  display_name = "DerivedKlass1"

class DerivedKlass2(BaseKlass):
  display_name = "DerivedKlass2"
Run Code Online (Sandbox Code Playgroud)

基本上所有派生类都有

具有类名硬编码的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):
  ....
Run Code Online (Sandbox Code Playgroud)

因此DerivedKlass1.display_name应返回"DerivedKlass1",DerivedKlass2.display_name应返回"DerivedKlass2".

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

谢谢,

ast*_*cci 7

您可以使用访问对象的类名

obj.__class__.__name__
Run Code Online (Sandbox Code Playgroud)

一旦创建了实例,你就需要这样做.最直接的方式是

class MyClass:

    def __init__(self):
        self.display_name = self.__class__.__name__
Run Code Online (Sandbox Code Playgroud)

你也可以使用一个元类来自动设置它,但我不认为这是值得的麻烦,而且我不记得那些工作现在完全正确.