2016-12-20 4 views
0

を引き起こしている私はhttps://stackoverflow.com/a/41112823/5618523ここで推奨されたものを試してみましたが、私はまだ、このクラスのポイントは、時に辞書にすでに項目のための関数を適用すると仮定されていることである問題は、なぜ、この再帰エラーに

class AppendiveDict(c.OrderedDict): 
    def __init__(self,func,*args): 
     self.func = func 
     c.OrderedDict.__init__(self,args) 
    def __setitem__(self, key, value,): 
     if key in self: 
      self[key] = self.func(self[key]) 
     else: 
      c.OrderedDict.__setitem__(self,key,value) 
a = AppendiveDict((lambda y: y + "sdf"),("a","b"),("c","d"),("e","f"),("a","b")) 
a 

を持っていますアイテムを再エンコーディングします。私はc.OrderedDict後self.funcを置く.IF

<ipython-input-15-b4bd349c86bf> in __init__(self, func, *args) 
     5  def __init__(self,func,*args): 
     6   self.func = func 
----> 7   c.OrderedDict.__init__(self,args) 
     8  def __setitem__(self, key, value,): 
     9   if key in self: 
<ipython-input-15-b4bd349c86bf> in __setitem__(self, key, value) 
     8  def __setitem__(self, key, value,): 
     9   if key in self: 
---> 10    self[key] = self.func(self[key]) 
    11   else: 
    12    c.OrderedDict.__setitem__(self,key,value) 

RecursionError       Traceback (most recent call last) 
<ipython-input-15-b4bd349c86bf> in <module>() 
    11   else: 
    12    c.OrderedDict.__setitem__(self,key,value) 
---> 13 a = AppendiveDict((lambda y: y + "sdf"),("a","b"),("c","d"),("e","f"),("a","b")) 
    14 a 

数3は、ちょうど を繰り返します。 (self、args)それはself.funcが存在しないという属性エラーを引き起こします。

+0

'self [key] = xxx'は、無限再帰である' self .__ setitem __(key、xxx) 'を呼び出します。 – thebjorn

答えて

2

self[key]ためのコール再び__setitem__、あなたが試すことができます:

def __setitem__(self, key, value,): 
     if key in self: 
      c.OrderedDict.__setitem__(self, key, self.func(value)) 

編集:その場合は、あまりにも

def __setitem__(self, key, value): 
    if key in self: 
     c.OrderedDict.__setitem__(self, key, self.func(self[key])) 

作品:再読み込みしますが、現在の設定値を変更することを目的と あなたが何をしているのですか?

関連する問題