簡體   English   中英

TypeError:__init __()缺少3個必需的位置參數

[英]TypeError: __init__() missing 3 required positional arguments

我正在建立一個使用http.server處理HTTP GET請求的類,這是我到目前為止編寫的內容:

class webServerHandler(BaseHTTPRequestHandler):
    __HOST = "localhost"
    __PORT = 8080

    # Custom GET response
    def do_GET(self):
        page_content = self.htmlHandler()
        self.wfile.write(page_content) # Send web page

    # HTML code
    def htmlHandler(self):
        self.send_response(200)
        self.send_header("Content-type", "text/html")
        self.end_headers()
        msg = '''
        <html><head><title>Test</title></head>
        <body><h1><center>Test</center></h1></body>
        </html>
        '''
        return bytes(msg, "UTF-8") # UTF-8 Format

    # Run the server
    def serverStart(self):
        # init HTTP Daemon
        http_daemon = HTTPServer((self.__HOST, self.__PORT), webServerHandler)
        http_daemon.serve_forever()
        print("Info: Server started")

我用它執行:

server = webServerHandler()
server.serverStart()

當我嘗試執行它時,它給了我這個錯誤:

TypeError: __init__() missing 3 required positional arguments: 'request', 'client_address', and 'server'

我做錯了什么?

發生此錯誤是因為BaseHTTPRequestHandler具有3個必需參數 ,因此,擴展BaseHTTPRequestHandler並且不覆蓋構造函數的webServerHandler具有這些必需參數。

當您需要使用requestclient_addressserver參數調用webServerHandler時,將不帶任何參數的情況下調用webServerHandler()

讓我們遵循MRO:

In [351]: http.server.BaseHTTPRequestHandler.__mro__
Out[351]: 
(http.server.BaseHTTPRequestHandler,
 socketserver.StreamRequestHandler,
 socketserver.BaseRequestHandler,
 object)

__init__是在socketserver.BaseRequestHandler定義的:

def __init__(self, request, client_address, server):
    self.request = request
    self.client_address = client_address
    self.server = server
    self.setup()
    try:
        self.handle()
    finally:
        self.finish()

如您所見,您需要提供所需的3個位置參數( requestclient_addressserver )來實例化實例,如異常中所述。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM