为什么不回拨被解雇?

时间:2014-09-11 21:50:49

标签: 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.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()

然而,这似乎尝试调用A类'带有4个参数的构造函数(我认为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

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

为什么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()未被触发)。

1 个答案:

答案 0 :(得分:1)

你的程序是这样做的:

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