我正在用 python 实现 Fenwick 树类。
基本上我有一个内部列表和两个方法,get(key)
和 increase(key, inc)
,来处理读取和更新这个列表。
使用 __getitem__
可以很容易地将 f[5]
映射到 f.get(5)
,但是有什么方法可以使 f[ 5] += 2
意思是 f.increase(5, 2)
?
我找到了一个相关的 mailing list thread这表示除非您将 __getitem__
的结果包装在实现 __iadd__
的代理类中,否则无法完成,但这不是一个选项。所以我可能不得不接受我必须使用 increase
方法,只是想我会在这里问,以防万一有天才有解决方案。
顺便说一句,我使用的是python3.2。
最佳答案
不,您描述的方法几乎是唯一的选择。可能会有细微的变化,但没有(至少是理智的)方法可以解决 f[5] += 2
将调用 __getitem__
,然后是 __setitem__ 的事实
,并且只对检索到的对象执行 +
部分,而不考虑容器。
关于python - 覆盖类的 f[k] += v,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8404414/