类体中类的Python名称

dre*_*obb 10 python metaprogramming python-2.x

是否可以在类定义的主体中获取类名?

例如,

class Foo():
    x = magic() # x should now be 'Foo'
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用类方法在类体外静态地执行此操作:

class Bar():
    @classmethod
    def magic(cls):
        print cls.__name__

Bar.magic()
Run Code Online (Sandbox Code Playgroud)

然而,这不是我想要的,我想在类体中的类名

vir*_*tor 7

好的 - 还有一个解决方案 - 这个实际上并不复杂!

import traceback

def magic():
   return traceback.extract_stack()[-2][2]

class Something(object):
   print magic()
Run Code Online (Sandbox Code Playgroud)

它将打印出"Something".我不确定提取的堆栈格式是否以任何方式标准化,但它适用于python 2.6(和2.7和3.1)