несвязанный метод python, возможно проблема с областью действия - PullRequest
0 голосов
/ 05 марта 2010

Я сейчас использую iPython для интерактивной настройки витой сети. Скрипт, который я запускаю в 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: 'необязательный метод onConnect () должен вызываться с экземпляром RandomVector в качестве первого аргумента (вместо этого ничего не получил)'

Кто-нибудь знает, почему это происходит?

1 Ответ

2 голосов
/ 05 марта 2010

Я не думаю, что это проблема с ограничениями. Вы уверены, что вам не нужно использовать:

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

т.е. создать экземпляр RandomVector, передаваемый в LocalNode?

Эта рекомендация вызывается сообщением об ошибке метода Unboud: несвязанный метод - это метод, связанный с классом, а не с экземпляром / объектом. Поскольку ваше сообщение жалуется на то, что a.onConnect является несвязанным методом, похоже, вам нужно передать экземпляр, а не класс.

...