【问题标题】:use of __init__ during inheritance in Python在 Python 中继承期间使用 __init__
【发布时间】:2015-06-25 01:27:59
【问题描述】:

我正在尝试构建一个简单的 HTTP 服务器并在 python 中使用 BaseHTTPServer。

当我尝试运行下面的代码时,我会收到一条错误消息,指出 init() 只需要 4 个参数(给定 1 个)。

我猜问题是处理程序中的构造函数覆盖了 BaseHTTPServer.BaseHTTPRequest

请告诉我哪里出错了

class handler(BaseHTTPServer.BaseHTTPRequestHandler):
  def __init__(self,server):
    BaseHTTPServer.BaseHTTPRequestHandler.__init__(self)
    self.server = server
    self.port = 8080

def do_GET(self):
    #perform some operation
class server():

def __init__(self):
    self.port = 65531
    self.host = 'localhost'

def run(self):
    serverClass = BaseHTTPServer.HTTPServer
    server = "xyz.c1589.com"               # Some random server
    h = handler(server)
    server = serverClass((self.host,self.port),h)
    print "Starting server!!"
    try:
        server.serve_forever()
    except:
        print "Error Creating Server"
        server.server_close()


if __name__ == '__main__':
server().run()

【问题讨论】:

  • BaseHTTPServer.BaseHTTPRequestHandler.__init__ 需要三个参数,而子类需要一个,因此当您实例化 handler 时,您需要传递四个参数。
  • 当您遇到错误时,您应该在您的问题中发布完整的回溯。

标签: python-2.7


【解决方案1】:

BaseHTTPServer.BaseHTTPRequestHandler.__init__(self)

您需要将调用的参数放在__init__ 中。

【讨论】:

    【解决方案2】:

    签名是BaseHTTPRequestHandler(request, client_address, server)。与self 一起,它产生了四个参数。你在__init__() 只提供了一个

    【讨论】:

      猜你喜欢
      • 2012-01-31
      • 2011-09-26
      • 2013-10-18
      • 2012-02-09
      • 2011-08-03
      • 2010-10-19
      • 1970-01-01
      • 1970-01-01
      • 2020-04-28
      相关资源
      最近更新 更多