Seite 1 von 1
Frage zu Überladen
Verfasst: Mittwoch 12. August 2009, 19:22
von cz3kit
Hi, ich hab ne Frage die das Überladen betrifft, also eigentlich eher wann man davon spricht.
Wenn man in einer Klasse die Operatoren neu schreibt dan spricht man doch von Überladen, oder?
Und wie sieht es dan mit dem Beispiel aus?
Code: Alles auswählen
class Hallo():
def __init__(self):
raise "Not Implemented"
def draw(self):
pass
class Weiter(Hallo):
def __init__(self):
self.wert = 1
def draw(self):
# soll jetzt irgendwas tun
da die Klasse Weiter die Methode draw() von Hallo erbt, aber diese neu beschreibt, spricht man hier dan auch von überladen??
MfG cz3kit
Verfasst: Mittwoch 12. August 2009, 20:29
von cofi
Nein, eigentlich spricht man besser von ueberschreiben, da die alten Methoden/Funktionen/etc nicht mehr verfuegbar sind.
Echtes Ueberladen findet man z.B in C++, da wird eine Funktion nicht nur anhand des Namens, sondern auch anhand der Typen bestimmt, die gibt es in Python Funktionsdefinitionen aber nicht.
Verfasst: Mittwoch 12. August 2009, 21:05
von sma
http://de.wikipedia.org/wiki/Überladen
http://de.wikipedia.org/wiki/Überschreiben
Stefan
PS: Was für eine doofe Forumssoftware - URLs bitte selbst zusammensetzen, ich fummel da jetzt kein URL-Tag rum, sondern schreibe lieber diesen Text, auch wenn das letztlich länger gedauert hat.
Verfasst: Donnerstag 13. August 2009, 15:23
von cz3kit
Ah oke alles kla.
Ich habe hier noch so eine Definition von beidem eben gerade gefunden:
Überladen: Methoden in gleicher Klassemit unterschiedlichen Typen
Überschreiben: Methoden in unterschiedlichen Klassen(abgeleitete Klasse und Basisklasse/Schnittstelle) mit übereinstimmenden Typen.
Verfasst: Donnerstag 13. August 2009, 15:43
von cofi
Nein, deine Definitionen sind falsch.
Das kommt nicht auf die Herkunft an, sondern, ob die Versionen nebeneinander existieren koennen.
Verfasst: Donnerstag 13. August 2009, 18:57
von cz3kit
Hmm dan versteh ich das überhaupt nicht mehr, dem Wiki Text nach trifft die Definition auf einige Punkte des Überschreibens zu, außer der Text ist falsch, wer weiß
Hier mal die URL
http://de.wikipedia.org/wiki/%C3%9Cberschreiben
Verfasst: Donnerstag 13. August 2009, 19:17
von cofi
Dort steht etwas ganz anderes als deine Definition. Das, was dort steht, stimmt.
Zum Ueberschreiben braucht man in der Regel eine Basisklasse, allerdings macht das nicht das Ueberschreiben aus, sondern die Grundbedingung ist, dass eine Methode gleichen Namens schon existiert.
Code: Alles auswählen
class C:
def ueberschrieben(self):
pass
def ueberschrieben(self):
pass
Das z.B. ist auch Ueberschreiben.
Ueberladen gibt es wie gesagt nicht in Python deshalb hier 2 C++ Funktionen:
Code: Alles auswählen
int do_foo(int i){
return (42 + i);
}
int do_foo(int i, char c){
return (42 - 23);
}
Je nach uebergebenen Argumenten wird eine andere Funktion aufgerufen zum Ueberladen braucht man (in C++) allerdings keine Klasse.
Worauf ich hinauswill ist folgendes:
Im Python-Fall existieren die beiden Methoden nicht nebeneinander (auch nicht wenn man die Signatur aendern wuerde).
Im C++ Fall dagegen schon. (Ueberschreiben kann man da allerdings nur Methoden, da sonst sich sonst der Compiler wegen der ODR beschwert)
Verfasst: Donnerstag 13. August 2009, 19:45
von cz3kit
Also wenn ich dein erstes Beispiel richtig verstehe wird erst eine Basisklasse benötigt in der eine MEthode vorhanden ist zB
Code: Alles auswählen
class Hallo():
def __init__(self, string):
self.string = string
def gibZurueck(self):
return self.string
So jetzt haben wir eine Zweite Klasse die von der ersten erbt
Code: Alles auswählen
class Was(Hallo):
def __init__(self, string):
Hallo.__init__(self, string)
def gibZurueck(self)
return (self.string + self.string)
also hääte ich die Methode gibZurueck überschrieben
Verfasst: Donnerstag 13. August 2009, 23:22
von BlackJack
@cz3kit: Und die `__init__()` hast Du auch überschrieben.