ZODB предоставляет PersistentList
и PersistentMapping
, но я бы хотел PersistentSet
. Я написал быстрый класс, который отражает древние PersistentList
из ZODB 2. Поскольку в 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
В коде «несколько баз имеют конфликт размещения экземпляров» ошибка . Я попытался создать оболочку UserSet
вокруг set
, но это тоже не решило проблему.
class UserSet(set):
def __init__(self):
self.value = set
def __getattribute__(self, name):
return self.value.__getattribute__(name
Наконец, я импортировал sets.Set
(заменен встроенным set
), но, похоже, это также реализовано в C. Я не нашел каких-либо реализаций набора в PyPI, поэтому я зашел в тупик.
Какие у меня варианты? Возможно, мне придется реализовать набор с нуля или использовать UserDict
и выбросить все value
s.