ZODB提供了一个PersistentList
和一个PersistentMapping
,但是我想要一个PersistentSet
。我编写了一个快速类,它反映了ZODB 2中的古代^{UserSet
,所以我不得不从基于C的内置set
进行扩展。在
class PersistentSet(UserSet, Persistent):
def __iand__(self, other):
set.__iand__(other)
self._p_changed = 1
...
...
...
def symmetric_difference_update(self, other):
set.symmetric_difference_update(other)
self._p_changed = 1
代码产生了一个“多个基有实例布局冲突”error。我尝试在set
周围创建一个UserSet
包装器,但这也没有解决问题。在
最后,我导入了sets.Set
(被内置的set
取代),但这似乎也在C中实现。我没有在PyPI上找到任何set实现,所以我现在处于死胡同中。在
我有什么选择?我可能不得不从头开始实现一个集合,或者使用UserDict
并丢弃所有value
的
将所有属性请求转发到内部集合:
对于以后的阅读,我只想提供一个稍微改进一下已经提出的答案。。。在
自定义持久集类
库中的持久集类
^{pr2}$另见
为什么不使用ZODB中的BTree库提供的persistent set类呢。有4个这样的班级。IITreeSet和IOTreeSet管理整数集,OITreeSet和OOTreeSet管理任意对象集。它们分别对应于四个BTree类:IIBTree、IOBTree、OIBTree和OOBTree。与Python内置的set实现相比,它们的优势在于它们的快速查找机制(到底层BTree的thanx)和持久性支持。在
下面是一些示例代码:
相关问题 更多 >
编程相关推荐