如何编写一个允许使用__name__对实例进行内省的类?

时间:2011-03-30 22:27:27

标签: python introspection

编写一个类Foo,允许其实例返回使用__name__创建的名称,

A = Foo(args)

str(A.__name__) 

应该返回'A'

1 个答案:

答案 0 :(得分:6)

这是不可能的(至少,不是在所有情况下,也不是没有肮脏的技巧)。在您的示例中,A是对Foo类型对象的引用。对象不知道如何存储对它的引用。如果你写:

A = Foo(args)
B = A

然后AB都引用相同的对象,并且完全无法区分,因此您无法找到用于保存对象的第一个引用的对象。当然,您可以扫描globals()以获取对象的引用,然后您会找到AB。但是,如果您del AA的所有痕迹都将消失。

你想做什么?如果您解释了用例,也许我们可以建议一个替代解决方案而不是您提出的解决方案。