如何在保存从OrderedDict继承的旧__init__时覆盖__init__

时间:2016-12-13 02:17:36

标签: python

class AppendiveDict(c.OrderedDict):
    def __init__(self,func,*args):
        c.OrderedDict.__init__(args)
    def __setitem__(self, key, value,):
        if key in self:
            self[key] = func(self[key])
        else:
            c.OrderedDict.__setitem__(self,key,value)

我有这个类应该将func函数应用于字典中已有的项目。如果我c.OrderedDict.__init__(args)它告诉我描述符__init__需要有序的而不是元组。

如果我更改c.OrderedDict.__init__(self),则表示中会出现一个空的有序词。

1 个答案:

答案 0 :(得分:3)

解决方案是传递两个参数,因为c.OrderedDict.__init__需要知道它应该在哪个实例上操作以及使用哪些参数:

import collections as c

class AppendiveDict(c.OrderedDict):
    def __init__(self, func, *args):
        c.OrderedDict.__init__(self, args)  # pass self AND args

或仅将superargs一起使用(因为super返回已知道调用它的实例的绑定方法):

class AppendiveDict(c.OrderedDict):
    def __init__(self, func, *args):
        super().__init__(args)