2017-01-25 1 views
-1

Я пытаюсь определить класс в Python для управления WebSockets, это docu-example является то, что я с помощьюошибка в питона методе настройки для обратных вызовов

это мой код:

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 
import json 
import websocket 
import thread 
import time 

class WebSocket: 
    def on_message1(self, ws, message): 
     print message 

    def on_error1(self, ws, error): 
     print error 

    def on_close1(self, ws): 
     print "Socket Closed" 

    def start(self): 
     global ws 
     ws.run_forever() 

    def __init__(self, host, port): 
     self.host = host 
     self.port = port 
     websocket.enableTrace(True) 
     self.ws = websocket.WebSocketApp("ws://" + host+":"+port, 
             on_message = on_message1, 
             on_error = on_error1, 
             on_close = on_close1)) 

if __name__ == '__main__': 
    print "Error: create an instance of this class instead!" 

Но когда я запускаю код Я получаю ошибку:

File "/home/pi/ABC/CASCADE/WebSocketClientClass.py", line 37, in init

NameError: global name 'on_message1' is not defined it is defined but somehow is not working... why?

благодарит

+0

Нет, это не так. Вам нужно использовать 'self.on_message1'. То же самое для остальных ... –

+0

Кроме того, я не вижу необходимости в классе. Python! = Java. Просто используйте функции, как в вашей ссылке. Действительно, я считаю, что вы можете затенять класс в 'websocket'! –

ответ

1

Вы определили метод внутри т он класс WebSocket, поэтому для его доступа вам необходимо self, например:

self.ws = websocket.WebSocketApp("ws://" + host+":"+port, 
            on_message = self.on_message1, 
            on_error = self.on_error1, 
            on_close = self.on_close1)) 
+1

вот ты! благодаря! –

Смежные вопросы