版本化词典的接口

Interface to versioned dictionary

提问人:Peter Hoffmann 提问时间:10/2/2008 更新时间:10/2/2008 访问量:347

问:

我有一个版本化的文档存储,我想通过类似字典的界面访问它。 常见的用法是访问最新的修订版(get、set、del),但也应该能够访问特定的修订版(键始终是 str/unicode 或 int)。

from UserDict import DictMixin
class VDict(DictMixin):   
    def __getitem__(self, key):
        if isinstance(key, tuple):
            docid, rev = key
        else:
            docid = key
            rev = None  # set to tip rev

        print docid, rev
        # return ...

In [1]: d = VDict()

In [2]: d[2]
2 None

In [3]: d[2, 1]
2 1

这个解决方案有点棘手,我不确定它是否是一个干净、易于理解的界面。我应该提供一个函数吗

def getrev(self, docid, rev):
   ...

相反?

评论

0赞 jsbueno 5/27/2016
以防万一有人来到这里寻找版本控制字典 - 本周早些时候我已经将一个工作版本上传到 github:github.com/jsbueno/extradict - 并将“extradict”更新到 pypi(关于这个问题,我使用带有命名版本参数的 .get 来检索较旧的属性版本)

答:

4赞 Thomas Wouters 10/2/2008 #1

是的,提供不同的 API 来获取不同的版本。要么是用于检索特定修订版的特定项的单个方法调用,要么是用于获取特定修订版的“视图”的方法调用,然后您可以像普通字典一样访问该视图,具体取决于此类“视图”是否有很多用处。或者两者兼而有之,考虑到 dict-view 解决方案无论如何都需要某种方法来获取特定修订版的项目:

class RevisionView(object):
    def __init__(self, db, revid):
        self.db = db
        self.revid = revid
    def __getitem__(self, item):
        self.db.getrev(item, self.revid)