2010-03-05 2 views
0

지금은 Twisted 네트워크를 대화식으로 설정하기 위해 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입니다()() 할 때마다이 연결이 끊어 CONN를 실행하는 트위스트 프로토콜에 전달되고있다.

으로 onConnect는 다음과 같습니다

으로 onConnect가 실행됩니다 때마다, 나는 오류 얻을
def onConnect(self): 
    self._lc = LoopingCall(self.advance) 
    self._lc.start(1) 

:

형식 오류 : '언 바운드 방법으로 onConnect()가 첫 번째 인수로 RandomVector 인스턴스 호출해야합니다 (가지고 아무것도 대신) '

왜 이런 일이 일어나는 지 알고 계십니까?

+1

전역 변수에 할당하지 않기 때문에'conn()'에 전역 선언이 필요하지 않습니다. –

답변

2

나는 이것이 범위 지정 문제라고 생각하지 않습니다.

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

즉, LocalNode로 전달하는 RandomVector를 인스턴스화 하시겠습니까?

이 권장 사항은 Unboud 메소드 오류 메시지에 의해 트리거됩니다. 언 바운드 메소드는 인스턴스/오브젝트가 아닌 클래스에 링크 된 메소드입니다. 귀하의 메시지가 언 바운드 메서드 인 a.onConnect에 대해 불평하기 때문에 클래스가 아닌 인스턴스를 전달해야하는 것처럼 보입니다.

+1

이것은 내게 맞는 대답처럼 들립니다. 파이썬에서 언 바운드 메소드가 무엇인지 더 자세히 설명하는 것이 도움이 될 수 있습니다. –

관련 문제