python - 为什么回调没有被触发?

标签 python class oop constructor

我对 Python 还很陌生,目前我正在运行一些示例来了解其工作原理,但我陷入了其中一个步骤。

我有一个包含多个属性的类,以及一个 __init__(self)构造函数,如下所示:

class A:
  # Some attributes here
  a = None;
  b = None;
  ...

  def __init__(self):
    # Do some stuff here

此外,我还有另一个类继承自 2 个类:上面的 ASocketServer.BaseRequestHandler (library)。

class TCPHandler(A, SocketServer.BaseRequestHandler):
  def handle(self):
    # Do some other stuff here

基本上这会触发 handle()方法一旦收到 TCP 请求,但我的问题比这简单得多。当我声明 TCPHandler对象,我就是这样做的:

server = SocketServer.TCPServer('localhost', 9191), TCPHandler)
server.serve_forever()

然而,这似乎尝试调用 A具有 4 个参数的 class' 构造函数(我认为 SocketServer.BaseRequestHandler 有):

TypeError: __init__() takes exactly 1 argument (4 given)

所以在 A我添加了另一个带有 4 个参数的构造函数:

  def __init__(self, a=None, b=None, c=None, d=None):
    # Do some other stuff here

现在这个构造函数似乎被触发了,但是,RequestHandler.handle()方法永远不会在到达 TCP 连接时调用。

为什么是handle()在这种情况下从未调用过方法?

---- 编辑 ----

这将是一个简短而完整的程序,它将说明我解释的行为:

import sys
import SocketServer

class A:
  a = ''
  b = ''
  c = ''

  def load_config(self):
    a = 'a'
    b = 'b'
    c = 'c'

  def __init__(self):
    self.load_config()

  def __init__(self, server_address, RequestHandlerClass, bind_and_activate=True, debug=True):
    self.load_config()

class TCPHandler(A, SocketServer.BaseRequestHandler):
  def handle(self):
    print "I reached handle()!!"

if __name__ == "__main__":
  server = SocketServer.TCPServer(('localhost', 9999), TCPHandler)
  server.serve_forever()
  • 如果未添加 5 个参数构造函数,则会显示上述错误。
  • 如果添加 5 个参数构造函数,则 I reached handle()!!消息永远不会显示(因此,handle() 不会被触发)。

最佳答案

你的程序执行以下操作:

def __init__(self, a=None, b=None, c=None, d=None):
  # Do some other stuff here

它可能应该这样做:

def __init__(self, a=None, b=None, c=None, d=None):
  A.__init__(self)
  SocketServer.BaseRequestHandler.__init__(self, a, b, c, d)
  # Do some other stuff here

关于python - 为什么回调没有被触发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25797523/

相关文章:

Python FeedParser 很好地格式化 Reddit

python : Process calling GRPC server gets stuck and terminates unexpectedly

python - 如何检查 Markdown 中的键值元数据

python - 将 numpy 数组附加到多索引数据帧

javascript - 如何将此 JavaScript 应用于所选图像?

php - Laravel - 如何在没有实例化对象的情况下调用静态函数

python - tkinter 单选按钮不显示类中的值

c++ - 构造控制台菜单类层次结构的最佳方法?

python - Python中对象之间的通信

c# - 打破 ASP.NET 中文件背后的大型代码