翻譯自 這裡
Preface :
為了 Performance 考量, 提供此模組讓 garbage collection 可以對 weak references 的 objects 進行回收而減少記憶體的使用量. 另外內建的 list 與 dict 也可以透過繼承來達成 weak reference 的效果 (更多請參考 Weak Reference Support):
Changed in version 2.4: Added support for files, sockets, arrays, and patterns.
Changed in version 2.7: Added support for thread.lock, threading.Lock, and code objects.
Note.
接著來看看這個模組上提供的方法 :
- class weakref.ref(object[, callback])
- weakref.proxy(object[, callback])
- weakref.getweakrefcount(object)
- weakref.getweakrefs(object)
- class weakref.WeakKeyDictionary([dict])
在 WeakKeyDictionary 上提供下面函數使用 :
- WeakKeyDictionary.iterkeyrefs()
- WeakKeyDictionary.keyrefs()
- class weakref.WeakValueDictionary([dict])
在 WeakValueDictionary 提供下面函數使用 :
- WeakValueDictionary.itervaluerefs()
- WeakValueDictionary.valuerefs()
- class weakref.WeakSet([elements])
Weak Reference Objects :
Weak reference 物件上沒有特殊的函數或屬性, 但你可以透過呼叫它來取得它所參考到的物件 :
如果所有的參考都失效, 則呼叫 reference object 會返回 None :
更進階的使用, 你可以繼承 Weak Reference 並重新定義自己的客製化用途. 例如底下的類別 ExtendedRef 會在被呼叫時紀錄總共呼叫次數, 並回傳包含參考物件與該呼叫次數的 tuple :
Example :
在使用 WeakValueDictionary 可以讓你將該物件的 Value 設為 Weak reference, 也就是說當 Value 參考到的物件已經沒有任何參考時, 則該筆 Entry 即被移除 :
在實際應用上, 可以用 WeakValueDictionary 當作 Object 的 Reference Store, 透過 Object id 來存取物件 :
Preface :
為了 Performance 考量, 提供此模組讓 garbage collection 可以對 weak references 的 objects 進行回收而減少記憶體的使用量. 另外內建的 list 與 dict 也可以透過繼承來達成 weak reference 的效果 (更多請參考 Weak Reference Support):
- class Dict(dict):
- pass
- obj = Dict(red=1, green=2, blue=3) # this object is weak referenceable
Changed in version 2.4: Added support for files, sockets, arrays, and patterns.
Changed in version 2.7: Added support for thread.lock, threading.Lock, and code objects.
Note.
接著來看看這個模組上提供的方法 :
- class weakref.ref(object[, callback])
- weakref.proxy(object[, callback])
- weakref.getweakrefcount(object)
- weakref.getweakrefs(object)
- class weakref.WeakKeyDictionary([dict])
在 WeakKeyDictionary 上提供下面函數使用 :
- WeakKeyDictionary.iterkeyrefs()
- WeakKeyDictionary.keyrefs()
- class weakref.WeakValueDictionary([dict])
在 WeakValueDictionary 提供下面函數使用 :
- WeakValueDictionary.itervaluerefs()
- WeakValueDictionary.valuerefs()
- class weakref.WeakSet([elements])
Weak Reference Objects :
Weak reference 物件上沒有特殊的函數或屬性, 但你可以透過呼叫它來取得它所參考到的物件 :
如果所有的參考都失效, 則呼叫 reference object 會返回 None :
更進階的使用, 你可以繼承 Weak Reference 並重新定義自己的客製化用途. 例如底下的類別 ExtendedRef 會在被呼叫時紀錄總共呼叫次數, 並回傳包含參考物件與該呼叫次數的 tuple :
- import weakref
- class ExtendedRef(weakref.ref):
- def __init__(self, ob, callback=None, **annotations):
- super(ExtendedRef, self).__init__(ob, callback)
- self.__counter = 0
- for k, v in annotations.iteritems():
- setattr(self, k, v)
- def __call__(self):
- """Return a pair containing the referent and the number of
- times the reference has been called.
- """
- ob = super(ExtendedRef, self).__call__()
- if ob is not None:
- self.__counter += 1
- ob = (ob, self.__counter)
- return ob
在使用 WeakValueDictionary 可以讓你將該物件的 Value 設為 Weak reference, 也就是說當 Value 參考到的物件已經沒有任何參考時, 則該筆 Entry 即被移除 :
在實際應用上, 可以用 WeakValueDictionary 當作 Object 的 Reference Store, 透過 Object id 來存取物件 :
- import weakref
- _id2obj_dict = weakref.WeakValueDictionary()
- def remember(obj):
- oid = id(obj)
- _id2obj_dict[oid] = obj
- return oid
- def id2obj(oid):
- return _id2obj_dict[oid]
This message was edited 26 times. Last update was at 06/04/2012 11:48:29
沒有留言:
張貼留言