OOP Material Grundlagen dynamische Attribute und Methoden Slots Module Ueberladen Vererbung UML Callback MVC Beispiele
Pfad: Startseite / Fächer / Informatik / Python / OOP / Ueberladen
Autor: mk
30.11.2008 17:28:24
1938
Ueberladen von Operatoren

Beispiel zur Bruchrechnung

# -*- coding: iso-8859-1 -*-
# Autor: mk, 20.11.08

class Bruch(object):

    def __init__(self,z,n):
        self.z = z
        self.n = n

    def kuerze(self):
        a=self.z
        b=self.n
        while b != 0:
            a,b = b,a%b
        self.z = self.z/a
        self.n = self.n/a

    def __add__(self,other):
        s = Bruch(1,1)
        s.z = self.z*other.n+other.z*self.n
        s.n = self.n*other.n
        s.kuerze()
        return s

    def __sub__(self,other):
        d = Bruch(1,1)
        d.z = self.z*other.n-other.z*self.n
        d.n = self.n*other.n
        d.kuerze()
        return d

    def __mul__(self,other):
        p = Bruch(1,1)
        p.z = self.z*other.z
        p.n = self.n*other.n
        p.kuerze()
        return p

    def __div__(self,other):
        q = Bruch(1,1)
        q.z = self.z*other.n
        q.n = self.n*other.z
        q.kuerze()
        return q

    def __str__(self):
        return str(self.z)+'/'+str(self.n)

    def __cmp__(self,other):
        if self.z*other.n < other.z*self.n: return -1
        elif self.z*other.n == other.z*self.n: return 0
        else: return 1

Aufgabe (Weigend,S.294)

Definiere eine Klasse 'Laenge' zur Repräsentation von Strecken. Es soll Betrag und Einheit gespeichert werden. Ein Beispiel für einen Konstruktoraufruf wäre

erddurchmesser = Laenge(12713.507,'km')

Zur Umrechnung der Einheiten soll die Klasse als privates Klassenattribut ein Dictionary namens __meter enthalten, das einer Längeneinheit die Länge in Meter zuordnet. Das Dictionary kann mit Hilfe folgender Tabelle definiert werden:

Einheit (Kürzel)Länge in Meter
mm0.001
cm0.01
m1
km1000
in0.0254
ft0.3048
mil1609

Die Methode getMeter() liefert die Länge eines Objekts in Meter. Der Additionsoperator soll mit Hilfe von __add__() auf sinnvolle Weise überladen werden. Die Methode __str__() gibt eine lesbare Darstellung des Objektes als Zeichenkette, z.B. '1.34 mil' oder '1.23 cm'. Die Methode __cmp__() erlaubt Vergleiche von Längen.

Lösung: laenge.py

Links

Valid XHTML 1.0!