Python - 子类中的call方法

时间:2014-10-22 01:48:30

标签: python

我正在使用一个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()

1 个答案:

答案 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()

您可能还想了解有关继承的更多信息: