[英]Traversing a Python object tree
我正在嘗試在Python中實現動態重載對象,以實時反映代碼更改。
模塊重裝工作正常,但是我必須重新創建模塊類的每個實例,以使更改生效。
問題在於在此過程中對象數據(對象__dict__
內容)丟失了。
所以我嘗試了另一種方法:
def refresh(obj, memo=None):
if memo is None:
memo = {}
d = id(obj)
if d in memo:
return
memo[d] = None
try:
obj.__class__ = getattr(sys.modules[obj.__class__.__module__],
obj.__class__.__name__)
except TypeError:
return
for item in obj.__dict__.itervalues():
if isinstance(item, dict):
for k, v in item.iteritems():
refresh(k, memo)
refresh(v, memo)
elif isinstance(item, (list, tuple)):
for v in item:
refresh(v, memo)
else:
refresh(item, memo)
而且令人驚訝的是它有效! 在我的對象上調用refresh()之后,新代碼將生效,而無需重新創建它們。
但是我不確定這是否是遍歷對象的正確方法嗎? 有沒有更好的方法遍歷對象的組件?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.