Python - invoke subclass method

2024-09-30 22:28:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是一个simpleWebSocket服务器类,有一个1秒的间隔计时器,我想在几个不同的类中调用方法。在

wsscb()类是SimpleWebSocketServer()的处理程序,如何从另一个对象(如udt()计时器)调用wss()对象的方法?在

呼叫wss.wsscb公司().myfunc()导致错误:“AttributeError:”SimpleWebSocketServer“对象没有属性”wsscb“”

呼叫wsscb.myfunc()结果为:TypeError:必须以wsscb实例作为第一个参数调用未绑定方法myfunc()(而未获得任何结果)

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

Tags: 对象方法selfserverinitdefmyfuncclass
1条回答
网友
1楼 · 发布于 2024-09-30 22:28:23

有几个问题。在

wss.wsscb()无效。键入这意味着您正在尝试调用wss中名为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()

您可能还想进一步了解继承:

相关问题 更多 >