2014-10-22 67 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