我有一个类如下:
class A:
def __init__(self):
self.data = {}
某个时刻,我想禁止修改self.data
字段。
我在PEP-416拒绝通知中读到有很多方法可以实现。所以我想找出它们是什么。
我尝试了这个:
a = A()
a.data = types.MappingProxyType(a.data)
那应该可以使用,但首先,它需要 Python3.3 及以上版本;其次,当我多次执行这个“禁止”操作时,会出现以下情况:
>>> a.data = types.MappingProxyType(a.data)
>>> a.data = types.MappingProxyType(a.data)
>>> a.data
mappingproxy(mappingproxy({}))
虽然最好只得到mappingproxy({})
,因为我将会频繁地“禁止”许多次。检查isinstance(MappingProxyType)
是一个选项,但我认为可能存在其他选项。谢谢。
throw NotImplemented
来重写__setitem__
。但是有没有保证在任何 Python 实现中,通过任何标准的dict
属性都无法修改键或值呢? - sshilovsky