ZODB提供了一個PersistentList
和PersistentMapping
,但我想要一個PersistentSet
。我寫了一個快速課,反映了ZODB 2中的古代PersistentList
。由於Python中沒有UserSet
,我不得不從基於C的內置set
擴展。PersistentSet in ZODB 3
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上找到任何設置實現,所以我現在處於死衚衕。
我有什麼選擇?我可能必須從零開始實施一套或使用UserDict
並扔掉所有value
s。
您的解決方案的工作原理看,但我做了一些改動。我在構造函數中添加了* args,並且在try塊的末尾添加了self._p_changed = 1 ...我不確定這是否不必要,或者是否在響應中被意外省略。謝謝。 – 2009-05-18 21:23:12
@Nikhil,這是一個簡單的捷徑。您只會假設每個變量訪問都會更改數據。如果你希望它是完美的,只需要包裝每一個改變集合的方法。_p_changed = 1 – Unknown 2009-05-18 21:48:23