我正在使用一个simpleWebSocket服务器类,并且有一个1秒的间隔计时器,我想在几个不同的类中调用方法。
wsscb()类是SimpleWebSocketServer()的处理程序,如何从另一个对象(如udt()计时器)调用wss()对象的方法?
调用wss.wsscb()。myfunc()会导致错误:" AttributeError:' SimpleWebSocketServer'对象没有属性' wsscb'"
调用wsscb.myfunc()会导致:TypeError:unbound方法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 :(得分:0)
有几个问题。
wss.wsscb()
无效。键入即表示您尝试在名为wsscb()
的wss中调用函数。 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()
您可能还想了解有关继承的更多信息: