簡體   English   中英

遍歷Python對象樹

[英]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()之后,新代碼將生效,而無需重新創建它們。

但是我不確定這是否是遍歷對象的正確方法嗎? 有沒有更好的方法遍歷對象的組件?

請在Python Cookbook中查看食譜(或者甚至可以在“印刷版” 食譜中找到其更好的版本,我相信您實際上可以通過Google圖書搜索免費閱讀,或者可以肯定地使用免費的1在O'Reilly的“ Safari”網站上閱讀)個星期的試用訂閱-我對哈德森的原始食譜做了很多編輯,以獲取“印刷書籍”版本!)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM