【发布时间】:2013-10-02 02:30:35
【问题描述】:
我有这样的课程:
class A:
def __init__(self):
self.data = {}
有时我想禁止self.data字段修改。
我在PEP-416 rejection notice 中读到有很多方法可以做到这一点。所以我想知道它们是什么。
我试过这个:
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) 是一个选项,但我认为可以存在其他选项。
谢谢
【问题讨论】:
-
一个frozendict 实现看起来相当简单:github.com/slezica/python-frozendict/blob/master/frozendict/…
-
@codelover 没错,我可以用
throw NotImplemented覆盖__setitem__。是否保证在任何 python 实现中都无法通过任何标准dict属性修改键或值? -
@sshilovsky 不,您可以派生一个用户字典并覆盖任何您可以在适用的地方使用的内容。
-
这能回答你的问题吗? What would a "frozen dict" be?
标签: python dictionary