8

这个问题很简单,我试图使缩进适合可读性。我刚刚开始使用 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 类名动态设置为类级别属性。因此,如果您愿意,请随时对帖子投反对票,但如果您也留下答案,我将不胜感激。

谢谢,

4

1 回答 1

7

您可以访问对象的类名

obj.__class__.__name__

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

class MyClass:

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

您也可以使用元类来自动设置它,但我认为这不值得麻烦,而且我现在不记得它们是如何工作的。

于 2013-07-15T19:22:12.203 回答