未绑定的python方法,可能是范围问题

时间:2010-03-05 16:45:06

标签: python twisted

我现在正在使用iPython以交互方式设置Twisted网络。我在iPython中运行的脚本描述了我必须做的最好的事情:

import router, pdb

# creates nodes which encapsulate RandomVector and VectorAdder objects
a = router.LocalNode(router.RandomVector, '/topic/a_c')
b = router.LocalNode(router.RandomVector, '/topic/b_c')
c = router.LocalNode(router.VectorAdder)
c.registerAsListener('/topic/a_c')
c.registerAsListener('/topic/b_c')

def conn():
    global a
    global b
    a.onConnect()
    b.onConnect()


router.r.loadOnConnect(conn)
router.STOMPconnect(router.r)
router.reactor.run()

正在发生的事情是conn()被传递给Twisted协议,每次连接丢失时都会运行conn()。

onConnect看起来像这样:

def onConnect(self):
    self._lc = LoopingCall(self.advance)
    self._lc.start(1)

每当onConnect运行时,我都会收到错误:

TypeError:必须使用RandomVector实例作为第一个参数调用'unbound方法onConnect()(没有任何替代)'

有谁知道为什么会这样?

1 个答案:

答案 0 :(得分:2)

我不认为这是一个范围问题。您确定不需要使用:

a = router.LocalNode(router.RandomVector(), '/topic/a_c')
b = router.LocalNode(router.RandomVector(), '/topic/b_c')

即。实例化传递给LocalNode的RandomVector?

此建议由Unboud方法错误消息触发:未绑定方法是链接到类而不是实例/对象的方法。由于您的消息抱怨a.onConnect是一个未绑定的方法,看起来您需要传递实例而不是类。