2014-10-22 36 views
1

我正在使用一個simpleWebSocket服務器類,並有一個1秒的間隔計時器,我想調用幾個不同類中的方法。如何從另一個對象(如udt()計時器)的wss()對象中調用方法?如何調用wsscb()Python - 調用方法在子類

調用wss.wsscb()MYFUNC()導致錯誤: 「AttributeError的: 'SimpleWebSocketServer' 對象沒有屬性 'wsscb'」

調用wsscb.myfunc()的結果:類型錯誤:未結合的方法MYFUNC()必須與wsscb例如被稱爲第一個參數(什麼都沒有代替)

class wsscb(WebSocket): 
    def __init__(self, server, sock, address): 
    WebSocket.__init__(self, server, sock, address) 

    def myfunc(self): 
    self.send('some data') 

    def handleMessage(self): 
    pass 

    def handleConnected(self): 
    pass 

class udt(Thread): 
    def __init__(self, event): 
    Thread.__init__(self) 
    self.stopped = event 

    def run(self): 
    while not self.stopped.wait(1.00): 
     wss.wsscb().myfunc() 
     xxx.yyy()().anotherfunc() 


## Main 
wss = SimpleWebSocketServer('', 4545,wsscb) 

## Start Timer 
stopFlag = Event() 
self.udt = udt(stopFlag) 
self.udt.start()  

wss.serveforever() 
+0

你爲什麼這樣做'wss.wsscb'?錯誤說'wsscb'不是'wss'的屬性。 – Gohn67 2014-10-22 02:11:42

+0

爲什麼不只是wsscb.myfunc()?此外,這是什麼庫,您是否創建了SimpleWebSocketServer類,或者它是從哪裏來的? – Parker 2014-10-22 02:12:44

+0

謝謝,我想從對象wss – crankshaft 2014-10-22 02:13:37

回答

0

有幾個問題。

wss.wsscb()無效。鍵入這意味着你正試圖調用一個名爲wsscb()的函數。 wss是一個SimpleWebSocketServer,並且沒有稱爲wsscb()的函數。函數與調用對象不同。

wsscb()也不起作用,因爲在你的班級中,你說這需要一個WebSocket對象,我假定它需要一些參數,所以你需要傳遞它。

我認爲最好是製作SimpleWebSocketServer(而不是WebSocket)的子類,並將自定義函數放在那裏。你的評論說「wsscb()是SimpleSocketServer的子類」,但事實並非如此。它是WebSocket的一個子類。

您也從未創建過wsscb類型的對象。

如果你能解釋一下你具體想實現的,什麼是myfunc(),我們也許能夠幫助更多的

此外,你真的不應該繼承Thread。報廢所做的udt類,而是

def myfunc(wsscb_object): 
    while True: 
     time.sleep(1) 
     wsscb_object.myfunc() 
     #whatever else you want 

wsscb_object = wsscb(#pass the parameters) 
thread = Thread(target=myfunc, args=(some_socket)) 
thread.start() 

您可能還需要更多的閱讀了關於繼承:

+0

感謝您的幫助,這只是一個代碼片段,我永遠在運行websocket服務器,並且每一個第二我想從udt類發送消息給連接的客戶端,myfunc將調用self.send()方法將一些數據傳輸到連接的客戶端 – crankshaft 2014-10-22 02:31:39

+0

請參閱http://stackoverflow.com/a/660974/380451更好的方式來處理線程。子線程'Thread'真的沒有理由 – Parker 2014-10-22 02:37:39