次の例では、types.MethodType(...)を介してメソッドオブジェクトをバインドしようとしています。うまくいかないようです。助言がありますか?前もって感謝します。
import types
class Base:
def payload(self, *args):
print "Base:payload"
class Drvd(Base):
def iter(self, func):
derived_func = types.MethodType(func, self, Drvd) # bind
print "drvd_func:", derived_func
derived_func() # result: calls Base:payload
# expected:calls Drvd:payload; why???
def payload(self, *args):
print "Drvd:payload"
derived = Drvd()
base_func = Base.payload
print "base_func:", base_func
derived.iter(base_func) # pass unbound method object
出力は次のとおりです。
base_func:<非バインドメソッドBase.payload>
drvd_func:<バインドされたメソッドDrvd.payload of < main .Drvd instance at 0x00B51648 >>
Base:payload