我有这样的课程:
class Point(object):
def __init__(self, x, y):
self.x = x
self.y = y
我通过以下方式创建此类的实例:
p1 = Point(5, 10)
我想知道这个类的任何字段是否已更改。我想可以有某种哈希函数,我可以比较它。
例如,在bash中我可以写md5sum <<<"string"
,md5sum <<<"string"
以分别获得x
,y
。然后我可以比较x
和y
,看看它们是否不同。
是否有类似的方法适用于Python的对象?
答案 0 :(得分:2)
您可以通过覆盖__setattr__
类方法来实现这一目标。
In[6]: class Point(object):
def __init__(self, x, y):
self.x = x
self.y = y
self._changed = False
def __setattr__(self, key, value):
if key != '_changed':
self._changed = True
super(Point, self).__setattr__(key, value)
def is_changed(self):
return self._changed
In[7]: p = Point(2,3)
In[8]: p.is_changed()
Out[8]: False
In[9]: p.x = 23
In[10]: p.is_changed()
Out[10]: True
答案 1 :(得分:0)
是的,有一种方法可以散列所有实例变量以检测更改:
>>> p1 = Point(5, 10)
>>> h = hash(frozenset(vars(p1).items())) # Record a hash checksum
>>> h == hash(frozenset(vars(p1).items())) # Check for changes
True
>>> p1.x += 1 # Change the object data
>>> h == hash(frozenset(vars(p1).items())) # Check for changes
False
该技术使用: