使用Python类名来定义类变量

gt6*_*89b 1 python classname python-2.7

我上课了

class MyClass(object):
    ClassTag = '!' + 'MyClass'
Run Code Online (Sandbox Code Playgroud)

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

@classfunction
def Foo(cls):
    tag = '!' + cls.__class__.__name__
Run Code Online (Sandbox Code Playgroud)

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

非常感谢你

Chr*_*ean 6

而不是显式分配'MyClass'我想使用一些构造来获取类名.

您可以使用类装饰器结合__name__类对象的属性来完成此任务:

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

@add_tag
class Foo(object):
    pass

print(Foo.ClassTag) # Foo
Run Code Online (Sandbox Code Playgroud)

除上述内容外,以下是一些附注:

  • 从上面的示例可以看出,类是使用class关键字而不是def关键字定义 的.该def关键字是用于定义功能.我建议您阅读Python提供的教程,以掌握Python基础知识.

  • 如果您没有处理遗留代码或需要Python 2库的代码,我强烈建议您升级到Python 3.除了Python Foundation将在2020年停止支持Python之外,Python 3还修复了Python 2所具有的许多怪癖,并提供了新的有用功能.如果您正在寻找有关如何从Python 2过渡到3的更多信息,那么一个好的起点就在这里.

  • @liliscent漂亮的帖子同时具有完全相同的命名内容哈哈.:p (2认同)