Dies ist eine alte Version des Dokuments!
LU04.A03 - Rechteck
Erstellen Sie die Klassen Rechteck und RechteckDC
Lernziele
- Sie können in einer «normalen» Klasse einen Konstruktor mit Default-Werten und Parametervalidierung implementieren.
- Sie können die Methode eq korrekt implementieren, um den Inhalt zweier Objekte zu vergleichen (inklusive Typprüfung mit isinstance und Rückgabe von NotImplemented).
- Sie kennen den Unterschied zwischen Objektidentität (is) und Inhaltsgleichheit (=
.
- Sie können eine Dataclass mit typisierten Attributen, Default-Werten und post_init zur Validierung definieren.
- Sie erkennen, dass eine Dataclass Konstruktor und eq automatisch generiert, und können den Unterschied zur manuellen Implementation in einer normalen Klasse erklären.
Auftrag
Teil 1 – Normale Klasse Rechteck
Erstellen Sie die Klasse Rectangle mit den Attributen width und height.
- Implementieren Sie den Konstruktor
init, der beide Werte als Parameter entgegennimmt. - Vergeben Sie sinnvolle Default-Werte (z. B. je 1.0), sodass ein Rechteck auch ohne Argumente erzeugt werden kann.
- Prüfen Sie im Konstruktor, dass
widthundheightgrösser als 0 sind. Lösen Sie andernfalls eineValueErrormit aussagekräftiger Meldung aus. - Implementieren Sie die Methode eq, sodass zwei Rechteck-Objekte genau dann als gleich gelten, wenn ihre Breite und Höhe übereinstimmen. Objekte eines anderen Typs sollen korrekt behandelt werden (Rückgabe von NotImplemented, nicht False).
Teil 2 – Dataclass RechteckDC
Erstellen Sie mit dem Decorator @dataclass die Klasse RectangleDC mit denselben Attributen width und height, inklusive Typ-Annotationen und identischen Default-Werten wie in Teil 1.
Ergänzen Sie eine post_init-Methode, welche dieselbe Validierung wie in Teil 1 vornimmt.
Verzichten Sie bewusst auf eine eigene eq-Methode. Halten Sie in einem Kommentar fest, weshalb dies bei einer Dataclass nicht nötig ist.
⇒ GitHub Repo für externe Besucher
GitHub Repository https://github.com/templates-python/m320-lu04-a03-rectangle
Lernende am BZZ müssen den Link zum GitHub Classroom Assignment verwenden
