【发布时间】:2009-05-17 22:07:09
【问题描述】:
ZODB 提供PersistentList 和PersistentMapping,但我想要PersistentSet。我写了一个快速类,它反映了 ZODB 2 中古老的 PersistentList。因为 Python 中没有 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 包装器,但这也没有解决问题。
class UserSet(set):
def __init__(self):
self.value = set
def __getattribute__(self, name):
return self.value.__getattribute__(name
最后,我导入了sets.Set(被内置的set 取代),但这似乎也是用C 实现的。我没有在 PyPI 上找到任何 set 实现,所以我现在处于死胡同。
我有什么选择?我可能不得不从头开始实施一个集合,或者使用 UserDict 并丢弃所有的 values。
【问题讨论】: