====== 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 ''width'' und ''height'' grösser als 0 sind. Lösen Sie andernfalls eine ''ValueError'' mit 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//
{{tag>M320-LU04}}
[[https://creativecommons.org/licenses/by-nc-sa/4.0/|{{https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png}}]] Marcel Suter