在 Python 中,有没有办法让一个对象的实例看到它分配给它的变量名?以下面的例子:
class MyObject(object):
pass
x = MyObject()
MyObject 是否有可能在任何时候看到它已被分配给变量名称 x?就像它的 __init__ 方法一样?
最佳答案
是的,这是可能的*。然而,这个问题比乍看起来更难:
- 可能有多个名称分配给同一个对象。
- 可能根本没有名字。
- 相同的名称可能指的是不同 namespace 中的其他一些对象。
无论如何,了解如何查找对象的名称有时对调试很有用 - 以下是如何做到这一点:
import gc, inspect
def find_names(obj):
frame = inspect.currentframe()
for frame in iter(lambda: frame.f_back, None):
frame.f_locals
obj_names = []
for referrer in gc.get_referrers(obj):
if isinstance(referrer, dict):
for k, v in referrer.items():
if v is obj:
obj_names.append(k)
return obj_names
如果您曾经想过围绕变量名称构建逻辑,请稍等片刻,考虑一下重新设计/重构代码是否可以解决问题。从对象本身恢复对象名称的需要通常意味着您的程序中的底层数据结构需要重新考虑。
* 至少在 Cpython 中
关于python - 对象可以检查分配给它的变量的名称吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8875202/