2

我想继承OrderedDict类来设置字典的最大长度。

我做了:

from collections import OrderedDict

class limitedDict(OrderedDict):
    def __init__(self, length):
        OrderedDict.__init__(self)
        self.length = length

但是现在我看不到要覆盖哪个函数来捕获“添加键”事件。我谷歌了一段时间没有找到答案。即使是特殊功能也不是一个明确的答案。

4

1 回答 1

1

使用 @AshwiniChaudhary__setitem__评论中提到的 dunder 方法。但是,您需要区分覆盖和设置新密钥。

from collections import OrderedDict

class limitedDict(OrderedDict):
    def __init__(self, length):
        OrderedDict.__init__(self)
        self.length = length

    def __setitem__(self, key, value):
        if key not in self and len(self) >= self.length:
            raise RuntimeWarning("Dictionary has reached maximum size.")
            # Or do whatever else you want to do in that case
        else:
            OrderedDict.__setitem__(self, key, value)

请注意,虽然该update方法还允许添加新键,但它__setitem__在后台调用,如评论中所述

如果字典超过了您可能想要的最大大小,self.popitem(last=False)直到它匹配长度(last=False对于 FIFO 顺序,last=True对于 LIFO 顺序,默认值)。

于 2018-03-14T10:14:03.697 回答