2016-03-21 16 views
1

Im triying, um eine Variable in init zu erstellen, aber es wird nicht in anderen Methode in der gleichen Klasse erkannt.Verwenden von Variablen von __init__ in anderen Methoden derselben Klasse

Ich weiß nicht, warum self.myvarlol nicht richtig in send_myheaders Arbeits(): S

Code:

from http.server import HTTPServer, BaseHTTPRequestHandler 
import time 

class myserveromg(BaseHTTPRequestHandler): 

    def __init__(self, a, b, c): 
     BaseHTTPRequestHandler.__init__(self, a, b, c) 
     self.myvarlol = "asdf" 
     self.date = self.date_time_string() 


    def send_my_headers(self): 
     self.send_header("Content-type", "text/html") 
     self.send_header("Date", self.date) 
     self.end_headers() 

    def do_GET(self): 
     self.send_response_only(200) 
     self.send_my_headers() 
     self.wfile.write(bytes("<html><head><title>Title goes here.</title></head>", "utf-8")) 
     self.wfile.write(bytes("<body><p>This is a test. </p>", "utf-8")) 
     self.wfile.write(bytes("<p>You accessed path: %s</p>" % self.path, "utf-8")) 
     self.wfile.write(bytes("</body></html>", "utf-8")) 


if __name__ == "__main__": 
    hostName = "localhost" 
    hostPort = 9000 

    appPortal = myserveromg 
    myServer = HTTPServer((hostName, hostPort), appPortal) 

    try: 
     print(time.asctime(), "Server Starts - %s:%s" % (hostName, hostPort)) 
     myServer.serve_forever() 
    except KeyboardInterrupt: 
     pass 

    myServer.server_close() 
    print(time.asctime(), "Server Stops - %s:%s" % (hostName, hostPort)) 

ERROR:

File "C:\Users\Anonym-PC\Desktop\nuseke.py", line 14, in send_my_headers 
    self.send_header("Date", self.date) 
AttributeError: 'myserveromg' object has no attribute 'date' 
+3

Sie initiieren keine Instanz der Klasse. Versuchen Sie, appPortal = myserveromg() –

+0

Ty für Ihre Antwort! Ich habe das ausprobiert, aber ich habe diesen Fehler jetzt: Traceback (letzter Aufruf zuletzt): Datei "C: \ Benutzer \ Anonym-PC \ Desktop \ nuseke.py", Zeile 30, in appPortal = myserveromg() TypeError: __init __() fehlt 3 erforderliche positional Argumente: 'a', 'b' und 'c' – Rakanitshu

Antwort

4

Sie sagen appPortal = myserveromg, aber das erstellt nur einen Alias. appPortal ist jetzt das gleiche wie myserveromg: eine Klasse. Sie müssen eine Instanz erstellen, die __init__ aufruft und date definiert. Fügen Sie dazu Klammern hinzu:

appPortal = myserveromg(a, b, c) # a, b, and c will need to be defined earlier on. 
+0

Vielen Dank für Ihre Antwort! in diesem Fall bekomme ich diesen Fehler Traceback (jüngste Aufforderung zuletzt): Datei "C: \ Benutzer \ Anonym-PC \ Desktop \ nuseke.py", Zeile 30, in appPortal = myserveromg() TypeError: __init __() fehlt 3 erforderliche Positionsargumente: 'a', 'b' und 'c' – Rakanitshu

+0

@Rakanitshu: Sie müssen nur drei Argumente angeben. Du bist derjenige, der es definiert hat, also bist du derjenige, der am besten weiß, welche. – zondo

+0

die drei Argumente sind von "BaseHTTPRequestHandler" (Python-Bibliotheken) und ich weiß nicht, warum, wenn ich es nicht in HTTPServer definieren ((hostName, hostPort), appPortal) S – Rakanitshu

Verwandte Themen