为什么没有被解雇?

2024-09-28 17:24:15 发布

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

我对Python还相当陌生,目前我正在运行一些示例来理解事情是如何工作的,但是我被其中一个步骤卡住了。你知道吗

我有一个包含几个属性的类,还有一个__init__(self)构造函数,类似这样:

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

  def __init__(self):
    # Do some stuff here

此外,我还有另一个类继承自2个类:上面的ASocketServer.BaseRequestHandlerlibrary)。你知道吗

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

基本上,这将在收到TCP请求后触发handle()方法,但我的问题要简单得多。当我声明一个TCPHandler对象时,我是这样做的:

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

但是,这似乎试图用4个参数调用A类的构造函数(我假设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()不会被触发)。你知道吗

Tags: selfnone参数hereserverinitdefsome
1条回答
网友
1楼 · 发布于 2024-09-28 17:24:15

您的程序执行以下操作:

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

相关问题 更多 >