overloading, inheritance, extending --> Webserver

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
schneggi
User
Beiträge: 2
Registriert: Montag 28. November 2011, 16:35

Hallo!

ich habe folgendes problem und ich hoffe ihr könnt mir helfen!
uns wurde innerhalb von 3 Tage Hardcore Python beigebracht.
Danach bestand unsere aufgabe einen Webserver zu integrieren, der Seiten ausliest und generiert...
Alles gut und schön, jeder gab fast das gleich ab aber eine mündliche Prüfung jedes einzelnen, haute ein paar von uns dann (inkl. mich) hinein, da
er alles GAAAAAAAAAANZ genau wissen wollte. (jetzt ist er wieder auf seiner uni und wir werden über skype geprüft...)
Also das ganze Beispiel passt an und für sich, also zum ändern is da nix mehr ABER ich soll es erklären "how it works"!!!

Vorallem die Begriffe: inheritance, extending, instantiation, overloading, local variables...
gut so ziemlich versteh ich das prinzip jetzt aber keiner meiner kollegen konnte mir erklären, warum das overloading ist...
bzw. inheritance und extending ist mir auch nicht ganz klar!

Könntet ihr mir das bitte kurz erklären? Hier der Code:

Code: Alles auswählen

import SocketServer, SimpleHTTPServer, re, sys, getopt, threading, socket
from SocketServer import TCPServer, ThreadingMixIn
port = xxxx

class ClientHandler( SimpleHTTPServer.SimpleHTTPRequestHandler ):
def do_GET(self):
  ....bla bla bla (response, header, wfile.write, open.......)

class MyServer( ThreadingMixIn, TCPServer ):
 allow_reuse_address = True

def checkArguments(args):
 bla (values, key,..)
   
def initServer():
 global port
 s = MyServer(("",port), ClientHandler)
 s.serve_forever()

if __name__ == "__main__":
 checkArguments(sys.argv[1:])
 initServer()
also speziell die def initServer():

danke!
lg
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Wenn ihr alle fast das gleiche abgebt und das Testat nicht besteht .. also da schlaegt mein Plagiarismus-Sinn aus.

Aber ok, `initServer` deklariert `port` sinnloserweise als globale Variable, erzeugt einen `MyServer` mit den Argumenten `("", port)` und `ClientHandler` und ruft dessen Methode `server_forever` auf.

Und wenn bei eurer Hardcode-Einfuehrung, nicht drankam, dass Einrueckung Teil der Syntax ist, dann solltest du spaetestens jetzt das Tutorial lesen, denn der Code ist nicht ausfuehrbar.
schneggi
User
Beiträge: 2
Registriert: Montag 28. November 2011, 16:35

hmmm... dass in foren immer alle so besser wissend auftrumpfen wollen.... aber ok!
danke für deine Antwort...bin da inzwischen auch schon selber drauf gekommen, also brauche keine Antworten mehr!!!

von wegen plagiarismus....haben in gruppen zusammengearbeitet und uns gegenseitig beraten (sind jetzt ja auch nur 10 leute in der gruppe)
und soviele spezielle seiten wo ähnliche beispiele wie wir es brauchten aufgelistet sind, gibs jetzt ja auch nicht....

ich habe hier wie man sieht ja nur bruchstücke meines codes aufgelistet...
und ganz sicher nicht darauf geschaut, dass dieser code noch ausführbar ist (danke mein code ist ausführbar und funktioniert!!....wie erwähnt ^^)
und wie sinnvoll ein globaler port ist, wenn man auf command line arguments mit -p, --port zugreifen will, muss ich wohl nicht erklären aber is ok...

lg schönen abend
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

schneggi hat geschrieben: und wie sinnvoll ein globaler port ist, wenn man auf command line arguments mit -p, --port zugreifen will, muss ich wohl nicht erklären aber is ok...
Also auf die Erklärung wäre ich schon gespannt :-D
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
BlackJack

@schneggi: Du fragst ob wir Dir Quelltext erklären können, der nicht vollständig und lauffähig ist. Das der vollständige Quelltext bei Dir läuft, will ja niemand in Abrede stellen, aber man kann ihn halt nicht erklären ohne ihn zu kennen.

Dann gibst Du noch eine Liste mit Begriffen, welche Du vor allem erklärt haben möchtest, die mit Auslassungspunkten endet. Wobei das bis auf die lokalen Variablen alles Grundlagenbegriffe der objektorientierten Programmierung (OOP) sind. Die müsst ihr entweder im Kurs behandelt haben, oder Du kannst sie in jeder Einführung zu OOP finden. Es läuft also darauf hinaus, dass Dir hier jemand was vorlesen soll, was Du auch an anderer Stelle schon fertig findest. Das ist nicht so sinnvoll, so etwas hier noch einmal hin zu schreiben. Die lokalen Variablen sind nicht OOP-spezifisch, aber ebenfalls Grundlagenwissen.

Trotzdem möchte ich aus der kurzen Liste einen Begriff heraus greifen: „overloading“/überladen. Das gibt es bei Funktionen und Methoden in Python nicht! Bei Operatoren kann man den Begriff auch in Python anwenden, aber das sollte bei der Implementierung eines Webservers eher nicht vorkommen.

Bei der Plagiarismus-Vermutung geht es weniger darum, dass der Quelltext anderen einfachen Webservern in Python ähnlich sieht, sondern dass Du da nicht ganz trivialen Quelltext hast, aber nach eigener Aussage nicht erklären kannst wie der funktioniert. Da stellt sich dann folgerichtig die Frage wie der zustande gekommen ist. Es bleiben im Grunde nur Zufall oder von wo anders abgeschrieben. Und das man zufällig einen Webserver richtig implementiert, ist eher unwahrscheinlich.

``global`` ist so gut wie nie sinnvoll, insbesondere wenn man Klassen verwendet. Denn die sind unter anderem ein Mittel um globale Variablen zu vermeiden.
Antworten