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)
然而,这不是我想要的,我想在类体中的类名
好的 - 还有一个解决方案 - 这个实际上并不复杂!
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)