1
爲了調試目的,我們希望獲取給定對象已知的所有名稱;我想要限定名稱(即A.x
而不是x
)。下面是我們的第一次嘗試:查找引用給定對象的限定名稱
import gc, sys
def find_names(obj):
result = []
for referrer in gc.get_referrers(obj):
if isinstance(referrer, dict):
for k in referrer:
if referrer[k] is obj:
n = '???'
for f in ('__qualname__', '__name__'):
if f in referrer:
n = referrer[f]
result.append('{}.{}'.format(n, k))
return ','.join(result)
的問題是,除非容器是一個類或模塊(當時__qualname__
或__name__
工作)的__dict__
我找不到從容器容器自身的「名字」。我不知道爲什麼__class__
不是實例的__dict__
(是否存儲在插槽中?)的一部分,但原因並不重要 - 重要的是我無法得到它。
有什麼我可以做這個工作如下:
class A:
pass
a = A()
a.x = object()
find_names(a.x) # I want this to return `a.x` rather than `???.x`