Einleitung: Objektorientierte Programmierung in Python¶

Die objektorientierte Programmierung (OOP) ist ein grundlegendes Konzept vieler Programmiersprachen, bei dem Daten (Attribute) und Funktionen (Methoden) in sogenannten Objekten gebündelt werden. Dieses Prinzip erleichtert die Strukturierung und Wiederverwendbarkeit von Code – besonders bei größeren Programmen.

Python unterstützt OOP nativ und bietet eine klare und einfache Syntax für die Definition eigener Klassen. Dabei können Klassen Konstruktoren, Methoden, Eigenschaften sowie Konzepte wie Vererbung und Kapselung nutzen.

Ziel dieses Beispiels¶

In diesem Notebook definieren wir eine einfache Python-Klasse namens Zahl, die grundlegende Rechenoperationen bereitstellt: Addition, Subtraktion, Multiplikation und Division.

Zusätzlich behandeln wir zwei typische Fehlerfälle:

  • Division durch null
  • Ungültiger Operand (z. B. kein Zahl-Objekt)

Das Beispiel dient als einfacher Einstieg in die objektorientierte Programmierung mit Python. Es demonstriert, wie man Klassen strukturiert, Methoden kapselt und Fehler sauber erkennt und behandelt.

In [2]:
# Definition einer Klasse "Zahl", die Grundrechenarten unterstützt
class Zahl:
    def __init__(self, wert):
        self.wert = wert  # Attribut zum Speichern des Zahlenwerts

    # Methode zur Addition
    def addiere(self, anderer):
        self._check_typ(anderer)  # Typprüfung
        return Zahl(self.wert + anderer.wert)

    # Methode zur Subtraktion
    def subtrahiere(self, anderer):
        self._check_typ(anderer)
        return Zahl(self.wert - anderer.wert)

    # Methode zur Multiplikation
    def multipliziere(self, anderer):
        self._check_typ(anderer)
        return Zahl(self.wert * anderer.wert)

    # Methode zur Division mit Fehlerbehandlung
    def dividiere(self, anderer):
        self._check_typ(anderer)
        if anderer.wert == 0:
            raise ValueError("Fehler: Division durch null ist nicht erlaubt.")
        return Zahl(self.wert / anderer.wert)

    # Gibt den aktuellen Wert aus
    def anzeigen(self):
        print(f"Wert: {self.wert}")

    # Private Methode zur Typprüfung
    def _check_typ(self, anderer):
        if not isinstance(anderer, Zahl):
            raise TypeError("Fehler: Argument ist kein Objekt der Klasse 'Zahl'.")

# Beispielnutzung
a = Zahl(12)
b = Zahl(4)

a.addiere(b).anzeigen()        # 12 + 4 = 16
a.subtrahiere(b).anzeigen()    # 12 - 4 = 8
a.multipliziere(b).anzeigen()  # 12 * 4 = 48
a.dividiere(b).anzeigen()      # 12 / 4 = 3.0

# Fehlerbeispiele (auskommentiert, damit das Programm weiterläuft)
# a.dividiere(Zahl(0))         # Division durch null (führt zu Fehler)
# a.addiere("kein_objekt")     # Typfehler (führt zu Fehler)
Wert: 16
Wert: 8
Wert: 48
Wert: 3.0