====== 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