rolgal hat geschrieben:kannst du mir das mal konkret darstellen?
heisst das weil ich z.b auch zwei strings mit + verbinden kann?
und was hat es mit der überladung des konstruktors auf sich?
Der Konstruktor (__init__) kann wie jede andere Methode auch überladen/überschrieben werden. Meist will man aber, daß der Elternkonstruktor trotzdem ausgeführt wird, und der Kindkonstruktor nur zusätzlich. Dann muß man den Elternkonstruktor explizit innerhalb des Kindkonstruktors aufrufen:
Code: Alles auswählen
class A:
def __init__(self, a):
self.a = a
class B(A):
def __init__(self, a, b):
A.__init__(self, a)
self.b = b
Zum Überladen von Operatoren: Du willst eine Klasse haben, die einen einheitenbehafteten Zahlenwert darstellt, also einen float und eine Einheit, z.B. als String.
Nun wäre es doch praktisch, wenn Du mit Instanzen dieser Klasse ganz normale Operationen durchführen kannst, wobei Einheiten automatisch konvertiert werden sollen. Also definierst Du für Deine Klasse eine Methode '__add__'.
Diese Methode bekommt als Argumente sich selbst und den Operationspartner. Innerhalb der Methode kannst Du nun den Typ auswerten: Instanz + Instanz geht, Instanz plus float oder int geht auch, sonst geht es nicht. Der Returnwert ist das Ergebnis der Addition, also eine neue Instanz deiner Klasse.
Ab sofort kannst Du einfach "A+B" schreiben, wobei A und B Instanzen deiner ZahlMitEinheit-Klasse ist. Python erkennt,
daß es diese Methode benutzen soll, um diese Instanzen zu addieren.
Genauso gehts Du noch für Subtraktion, Multiplikation ... usw. vor.
Natürlich kann man damit auch Blödsinn machen. Also eine Klasse definieren, die sich wie ein Integer verhält, aber bei '-' immer addiert statt subtrahiert...
Ich hoffe, das war jetzt etwas klarer.
Jörg