을 포함 당신을위한 구현입니다. 모니터링하는 객체는 해시 가능이며 pickable이어야합니다. 또한 을 사용하면 모니터 된 개체가 삭제되지 않습니다. 즉, Monitor
은 모니터링 대상 개체가 삭제되지 않도록합니다. 이
object1 = MyObject()
monitor = Monitor()
print monitor.is_changed(object1)
object1.change_somehow()
print monitor.is_changed(object1)
print monitor.is_changed(object1)
처럼 테스트를하는 경우
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
은 내가 닉 크레이그 우드에서 아이디어를 훔쳐, 그리고 믹스 클래스로 변경
False
True
False
니스. 그 동안 나는 당신 자신과 비슷한 방식으로 그것을 직접 구현했습니다. 차이점은 해시를 사용한다는 것입니다. 왜 피클을 사용 했습니까? 더 낫니? –
개체가 변경되면 해시가 변경되지는 않지만 피클은 분명히 변함을 알 수 있습니다. –
알았어, 팁 주셔서 감사, 나는 피클을 사용하여 시작합니다. –