我想要一个Python对象,它将监视自上次签入以来其他对象是否已更改,可能是通过存储它们的哈希和比较.它的行为应该是这样的:
>>> library = Library()
>>> library.is_changed(object1)
False
>>> object1.change_somehow()
>>> library.is_changed(object1)
True
>>> library.is_changed(object1)
False
Run Code Online (Sandbox Code Playgroud)
你知道这样的事吗?
这是给你的一个实现.请注意,您监视的对象必须是可清除和可选择的.另请注意,使用a WeakKeyDictionary表示Monitor不会阻止被监视对象被删除.
from weakref import WeakKeyDictionary
from cPickle import dumps
class Monitor():
def __init__(self):
self.objects = WeakKeyDictionary()
def is_changed(self, obj):
current_pickle = dumps(obj, -1)
changed = False
if obj in self.objects:
changed = current_pickle != self.objects[obj]
self.objects[obj] = current_pickle
return changed
class MyObject():
def __init__(self):
self.i = 1
def change_somehow(self):
self.i += 1
Run Code Online (Sandbox Code Playgroud)
如果你这样测试它
object1 = MyObject()
monitor = Monitor()
print monitor.is_changed(object1)
object1.change_somehow()
print monitor.is_changed(object1)
print monitor.is_changed(object1)
Run Code Online (Sandbox Code Playgroud)
它打印
False
True
False
Run Code Online (Sandbox Code Playgroud)