代码之家  ›  专栏  ›  技术社区  ›  Srikanth

版本化字典的接口

  •  2
  • Srikanth  · 技术社区  · 16 年前

    我有一个版本化的文档存储,我想通过类似dict的接口访问它。 常用的用法是访问最新的修订版(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):
       ...
    

    相反?

    1 回复  |  直到 16 年前
        1
  •  4
  •   Thomas Wouters    16 年前

    是的,为获取不同版本提供不同的API。一个用于检索特定修订的特定项的方法调用,或者一个用于获取特定修订的“视图”的方法调用,然后您可以像普通的dict一样访问该视图,这取决于这样的“视图”是否会有很大的用处。或者两者兼而有之,考虑到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)