2016-11-23 7 views
0

あるオブジェクトから別のオブジェクトにメソッドをバインドする際にエラーが発生しました。あるオブジェクトから別のオブジェクトへのバインドメソッド

何が起こっているのか簡単な推測...私が得ているエラーは、樹皮のメソッドが依然として元のオブジェクトにバインドされていることによるものだと思います。そのため、2つの自己がhd.bark()関数に挿入されます。

EDIT:

ここでの私の目標は、戦略オブジェクトを交換しながら、AAデータ・ロード戦略の「ポスト処理機能」のbuissnessロジックを維持している...私はこれは良い方法ではありません知っている、まだこれがあります

bark bark bark 
ruff ruff 
border bark 
<bound method Dog.bark of <__main__.Dog object at 0x000000004D9EC0B8>> 
<unbound method Husky.bark> 
<bound method Husky.bark of <__main__.Husky object at 0x00000000599616D8>> 
Traceback (most recent call last): 

    File "<ipython-input-50-1279b42a4bd2>", line 29, in <module> 
    hd.bark() 

TypeError: bark() takes exactly 1 argument (2 given) 
+0

達成しようとしていることはわかりません。また、 'class Husky'の' borderBark'は何ですか? – sal

+0

私は実行時に関数をパンクして、コードの別の部分に割り当てられたメソッドを交換しています。つまり、私は仕事をするために同じ関数を使うことができますが、私が使っているデータを入れ替えることができます。 – CodeMode

+0

見ていただきありがとうございました:) – CodeMode

答えて

0
[OK]を

ので、コ:いくつかのコマンドライン機能

import types 
from copy import deepcopy 
class Dog(object): 
    def bark(self): 
     print 'bark bark bark' 

class Husky(object): 
    def bark(self): 
     print 'ruff ruff' 

def borderBark(self): 
    print 'border bark' 
d = Dog() 
d.bark() 

h = Husky() 
h.bark() 

b = Dog() 
b.bark = types.MethodType(borderBark,b) 
b.bark() 

hd = Husky() 
bark = types.MethodType(deepcopy(d.bark),None, Husky) 
print d.bark 
print bark 
hd.bark = types.MethodType(bark,hd,Husky) 
print hd.bark 
hd.bark() 

出力を得るために小さなハックバインドされたメソッドはラップされた関数なので、d.bark.im_funcを介してバインドされていないメソッドを見つける必要があります。

hd = Husky() 
hd.bark = types.MethodType(d.bark.im_func ,hd,Husky) 
hd.bark() 
関連する問題