2016-12-13 71 views
1
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__需要一個ordereddict而不是一個元組。如何覆蓋__init__,同時保存從OrderedDict繼承舊的__init__

如果我更改c.OrderedDict.__init__(self),那麼表示中會出現一個空的ordereddict。

回答

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 

或者用super只有args(因爲super返回綁定方法已知道它在哪個實例被稱爲):

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