我正在尝试修改第三方dict类以使其在某个时间点后不可变。对于大多数类,我可以分配给方法槽来修改行为。但是,这似乎不适用于所有类中的所有方法。特别是对于dict,我可以重新分配update,但不能__setitem__。
为什么?它们有何不同?
例如:
class Freezable(object):
def _not_modifiable(self, *args, **kw):
raise NotImplementedError()
def freeze(self):
"""
Disallow mutating methods from now on.
"""
print "FREEZE"
self.__setitem__ = self._not_modifiable
self.update = self._not_modifiable
# ... others
return self
class MyDict(dict, Freezable):
pass
d = MyDict()
d.freeze()
print d.__setitem__ # <bound method MyDict._not_modifiable of {}>
d[2] = 3 # no error -- this is incorrect.
d.update({4:5}) # raise NotImplementedError
人到中年有点甜
相关分类