使用Python类名来定义类变量

时间:2018-03-21 21:19:38

标签: python python-2.7 classname

我有一个班级

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

我没有明确指定'MyClass',而是想使用一些构造来获取类名。如果我在一个类函数中,我会做类似

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

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

非常感谢

2 个答案:

答案 0 :(得分:6)

  

而不是明确指定“MyClass”#39;我想使用一些构造来获取类名。

您可以使用类装饰器结合类对象的__name__属性来实现此目的:

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

@add_tag
class Foo(object):
    pass

print(Foo.ClassTag) # Foo

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

  • 从上面的例子中可以看出,类是使用 class个关键字,而非def关键字。 def关键字适用于 定义功能。我建议走过the tutorial provided by Python, 掌握Python基础知识。

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

答案 1 :(得分:4)

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

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

# test

@add_tag
class MyClass(object):
    pass

print(MyClass.ClassTag)