【发布时间】:2009-11-19 19:30:29
【问题描述】:
在以下示例中,我尝试通过 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:
drvd_func: main.Drvd 实例的绑定方法 Drvd.payload 在 0x00B51648>>
基数:有效载荷
【问题讨论】:
-
既然子类继承了超类的功能,那你为什么要这样做呢?有什么意义?
-
Alex 已经指出,原来的未绑定方法 Base.payload 不能转换为另一个同名的类成员函数。即使是继承的类。我目前正在设置树迭代。看起来我应该使用访问者/多方法方法,或者每个有效负载处理程序都有 ID,每个节点都有一个调度程序。它将用于存储来自 Sax 解析器的 XML 输出-
-
尽可能使用访客。避免魔法。
标签: python binding types methods bind