2016-08-30 3 views
0

私はcollections.OrderedDictから継承し、初期化子はデフォルトなしなしのイニシャライザを継承しています。私の目標は、浅いインスタンスのコピーを作成することです。しかし、私の初期の単純なアプローチは動作しませんし、新しいインスタンスを構築するときに位置引数を指定する必要があるため、型エラーが発生します。collections.OrderedDictを継承するクラスのインスタンスの浅いコピーを作成する

class B(collections.OrderedDict): 

def __init__(self, whatever): 
    super().__init__() 
    self.whatever = whatever 

b = B(3) 
b.update({'a':1}) 
print(b.copy()) 

ソリューションを追加することができます

def copy(self): 
    new = collections.OrderedDict(self) 
    new.whatever = self.whatever 
    return new 

しかし、属性の数が大きくなると、これは手に負えなくなりました。この問題に対して、より良い、より直接的な解決策がありますか?

EDIT: 私はあなたのpython copyライブラリを使用することができますPythonの3.5に

+1

は、あなたが行うことができます属性: '新しい.__ dictの__アップデート。 (self .__ dict __) 'を' copy() 'に追加します。 –

+0

@AshwiniChaudhary問題は、私がそれを好きにしても、クラスBのオブジェクトを戻さないということです。 – NoBackingDown

答えて

0

を使用しています:我々は唯一のインスタンスを懸念している場合

copied_object = copy.copy(b) 
+0

これはPython 2では動作しません.POP 3のOPのオリジナルメソッドはPython 3で動作していたので、OPが使用していると仮定します。 – Karin

+0

@Karin実際にはPython 3を使用しています。 – NoBackingDown

+0

@Dominik That's奇妙な - 私はあなたのコードをPython 3で実行すると、私はTypeErrorを取得しません。しかし、私はPython 2で1つを取得します。 – Karin

関連する問題