我希望实现一个类,它将“包装”Python的
假设我要创建一个像这样的对象;我需要实现什么方法?
dict
对象,而不是子类化它,这样当检测到后端存储中的更改时,我可以重新创建委托的字典对象。我打算在每次访问字典进行读取时检查后备存储中的更改。假设我要创建一个像这样的对象;我需要实现什么方法?
dict
对象,而不是子类化它,这样当检测到后端存储中的更改时,我可以重新创建委托的字典对象。我打算在每次访问字典进行读取时检查后备存储中的更改。collections.Mapping
(或collections.MutableMapping
,如果你还想允许代码使用你的实例来更改模拟/封装字典,例如通过索引赋值,pop
等)。__len__
__iter__
__getitem__
__contains__
__setitem__
__delitem__
我认为这取决于你使用哪些方法。大多数事情可能都可以用__getitem__
、__setitem__
、__iter__
和__len__
来实现。但是你需要查看一些用例,特别是与__iter__
有关的用例。就像这样:
for key in wrapped_dictionary:
do_something(wrapped_dictionary[key])
如果在每次迭代中都访问数据源,那么速度会很慢,更不用说如果数据源正在发生变化,它可能甚至无法正常工作。因此,在循环之前,您可能需要抛出某种异常并实现iteritems
作为替代方案,一次性加载所有键值对,然后再循环遍历它们。
__getattr__
无法工作,因为特殊方法是在类上查找而不是实例上查找,并且该查找跳过了__getattr__
。 - max