使用 Python class 名称定义 class 变量

Using Python class name to define class variables

我有一个class

class MyClass(object):
    ClassTag = '!' + 'MyClass'

我不想显式分配 'MyClass',而是想使用一些构造来获取 class 名称。如果我在 class 函数中,我会做类似

的事情
@classfunction
def Foo(cls):
    tag = '!' + cls.__class__.__name__

但我在 class 范围内,但不在任何函数范围内。解决这个问题的正确方法是什么?

非常感谢

Instead of explicitly assigning 'MyClass' I would like to use some construct to get the class name.

您可以使用 class 装饰器结合 class 对象的 __name__ 属性来完成此操作:

def add_tag(cls):
    cls.ClassTag = cls.__name__
    return cls

@add_tag
class Foo(object):
    pass

print(Foo.ClassTag) # Foo

除上述内容外,还有一些旁注:

  • 从上面的例子可以看出,classes是使用 class 关键字,而不是 def 关键字。 def 关键字用于 定义函数。我建议浏览 教程 由 Python 提供, 掌握 Python 基础知识。

  • 如果您不是在处理遗留代码,或需要 Python 2 库的代码,我强烈推荐 upgrading to Python 3. Along with the fact that the Python Foundation will stop supporting Python in 2020, Python 3 also fixes many quirks that Python 2 had, as well as provides new, useful features. If you're looking for more info on how to transition from Python 2 to 3, a good place to start would be here

一个简单的方法是写一个装饰器:

def add_tag(cls):
    cls.ClassTag = cls.__name__
    return cls

# test

@add_tag
class MyClass(object):
    pass

print(MyClass.ClassTag)