我有一个班级
class MyClass(object):
ClassTag = '!' + 'MyClass'
我没有明确指定'MyClass'
,而是想使用一些构造来获取类名。如果我在一个类函数中,我会做类似
@classfunction
def Foo(cls):
tag = '!' + cls.__class__.__name__
但是我在类范围内但不在任何函数范围内。解决这个问题的正确方法是什么?
非常感谢
答案 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)