使用FIFO策略缓存对象

import UserDict
class FifoCache(object, UserDict.DictMixin):
    def __init__(self, num_entries, dct= ()):
        self.num_entries = num_entries
        self.dct = dict(dct)
        self.lst = [ ]
    def __repr__(self):
        return '%r (%r,%r)' % (self.__class__.__name__, self.name_entries, self.dct)
    def copy(self):
        return self.__class__(self.num_entries, self.dict)
    def keys(self):
        return list(self.lst)
    def __getitem__(self,key):
        return self.dct[key]
    def __setitem__(self, key, value):
        dct = self.dct
        lst = self.lst
        if key in dct:
            lst.remove(key)
        dct[key] = value
        lst.append(key)
        if len(lst) > self.num_entries:
            del dct[lst.pop(0)]
    def __delitem__(self, key):
        self.dct.pop(key)
        self.lst.remove(key)
    def __contains__(self, item):
        return item in self.dict
    has_key = __contains__


if __name__ == '__main__':
    f = FifoCache(num_entries = 3)
    f["fly"] = "foo"
    f["moo"] = "two"
    f["bar"] = "ba2"
    f["dave"] = "wilson"
    f["age"] = 20
    print f.keys()
posted @ 2012-08-31 17:50  苍术厚朴  阅读(398)  评论(0编辑  收藏  举报