Discuss / Python / 求助:FIFO_dict 不懂继承的部分

求助:FIFO_dict 不懂继承的部分

Topic source
from collections import OrderedDict

class FIFO_Dict(OrderedDict):
    
    def __init__(self,capacity):
        super(FIFO_Dict,self).__init__()
#        super().__init__()
        self.capacity=capacity
        
    def __setitem__(self,key,value):
#       判断key是都存在于dict的两种方法:     
        if key in self:         #        if self.get(key):
            print('set:', (key, value))
        else:
            if len(self)>=self.capacity:
                last=self.popitem(last=False)
               #returned in LIFO order if last is True or FIFO order if False.
                print('remove:',last)
            print('add:', (key, value))
        OrderedDict.__setitem__(self,key,value)     
#测试
father=OrderedDict(a=1,c=3,b=2,abc=4)  
father2= OrderedDict([('key1', 1), ('key2', 2), ('key3', 3)])
child=FIFO_Dict(a=1,c=3,b=2,abc=4)      
child2=FIFO_Dict([('key',1),('key2',2),('key3',3)]

为什么在def __init__部分用了继承 super(FIFO_Dict,self).__init__() 之后

测试的时候不能像father,father2 那样初始化child、child2。我的理解是如果FIFO_Dict继承自OrderedDict,那么它的初始化应该可以像OrderedDict。

YuanYin233X

#2 Created at ... [Delete] [Delete and Lock User]

因为你的__init__()函数没有参数,如果想要类似父类那样,就设置上参数

这个问题我也琢磨了很久。

第一步:

加上参数

    def __init__(self,capacity,*args,**kwargs):

        OrderedDict.__init__(self,*args,**kwargs)

        self._capacity=capacity

但是在这个示例中没用,也会报错,因为我发现OrderedDict的init构造函数和内建的dict不一样,在实例化一个字典的时候会调用自身的__setitem__,而内建的dict不会。具体深层的逻辑没整明白。


  • 1

Reply