Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen Revision Vorhergehende Überarbeitung | |||
| de:modul:m320_2024:learningunits:lu03:aufgaben:gleichheit [2026/08/30 14:05] – gelöscht - Externe Bearbeitung (Unbekanntes Datum) 127.0.0.1 | de:modul:m320_2024:learningunits:lu03:aufgaben:gleichheit [2026/08/30 14:05] (aktuell) – ↷ Seite von modul:m320_2024:learningunits:lu03:aufgaben:gleichheit nach de:modul:m320_2024:learningunits:lu03:aufgaben:gleichheit verschoben msuter | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| + | ====== LU03.A02 - Identität und Gleichheit ====== | ||
| + | |||
| + | <WRAP center round todo 60%> | ||
| + | Sie können zwei Objekte vergleichen: | ||
| + | - die Gleichheit der bzw. Zugehörigkeit zur Klasse | ||
| + | - die Gleichheit der Objekt-Referenzen (eben die Identität) | ||
| + | - die Gleicheit der Inhalte von Objekten | ||
| + | </ | ||
| + | |||
| + | |||
| + | ===== Ziel ===== | ||
| + | Sie kennen den Unterschied zwischen Gleichheit (gleiche Klasse) und Identität (gleiche Referenz).\\ | ||
| + | Zudem können Sie den Inhalt zweier Objekte vergleichen. | ||
| + | |||
| + | ===== Auftrag ===== | ||
| + | - Ergänzen Sie den Code der Klasse '' | ||
| + | - Führen Sie den Unit-Test aus. Er muss fehlerfrei ablaufen. Sollten Fehler auftreten, begrenzen sich diese auf die von Ihnen implementierte Methode '' | ||
| + | - Ergänzen Sie den Code in '' | ||
| + | |||
| + | |||
| + | ===== Vorgehen ===== | ||
| + | - Akzeptieren Sie das Assignment im GitHub Classroom. | ||
| + | - Klonen Sie ihr Repository in die Entwicklungsumgebung. | ||
| + | - Führen Sie einen Commit und einen Push durch. | ||
| + | |||
| + | ==== Dauer ==== | ||
| + | 30 Minuten + Hausaufgabenzeit | ||
| + | |||
| + | |||
| + | ===== Wichtig zu Wissen ===== | ||
| + | In dieser Aufgabe werden 3 verschiedene Arten von " | ||
| + | - die Gleichheit der bzw. Zugehörigkeit zur Klasse | ||
| + | - die Gleichheit der Objekt-Referenzen (eben die Identität) | ||
| + | - die Gleicheit der Inhalte von Objekten | ||
| + | |||
| + | Die ersten beiden Fälle sind durch Keywords eindeutig erkennbar und in allen Fällen durch den Interpreter zu verstehen. | ||
| + | Die Klassenzugehörigkeit wird durch '' | ||
| + | |||
| + | Bei der inhaltlichen Gleichheit wird das ganze etwas komplexer. | ||
| + | Bei einfachen Datentypen (int, float, char, boolean) kann der Interpreter die Anweisung | ||
| + | |||
| + | <code Python> | ||
| + | value = 7 | ||
| + | ... | ||
| + | if value == 77: | ||
| + | ... | ||
| + | </ | ||
| + | umsetzen, da klar ist, um welchen Datentyp es sich handelt. | ||
| + | |||
| + | Das gilt auch für einzelne Zeichen... | ||
| + | <code Python> | ||
| + | if sign == ' | ||
| + | </ | ||
| + | ... und den Vergleich von Attributen (bzw. Attributswerte) die einen einfachen DAtentyp repräsentieren. | ||
| + | <code Python> | ||
| + | val1 = 99 | ||
| + | val2 = 33 | ||
| + | ... | ||
| + | if val1 > val2: | ||
| + | ... | ||
| + | </ | ||
| + | Bei einer komplexen Klasse mit verschiedenen Attributen kann der Interpreter den '' | ||
| + | Jede Klasse verfügt über eine (verborgene) Methode '' | ||
| + | Es muss | ||
| + | - die (inhaltliche) Gleichheit zweier Objekte sowie | ||
| + | - ein Vergleich mit einem konstanten Wert | ||
| + | sichergestellt sein.\\ | ||
| + | ---- | ||
| + | Ein Beispiel dazu.\\ | ||
| + | Eine Klasse Person weist die Attribute Name und Vorname auf. Es wird festgelegt, dass bei einem Vergleich mit == auch eine Konstante der Art " | ||
| + | <code Python> | ||
| + | from dataclasses import dataclass | ||
| + | from dataclasses import dataclass | ||
| + | @dataclass | ||
| + | class Person: | ||
| + | # die Attribute der Datenklasse | ||
| + | first_name: str = None | ||
| + | last_name: str = None | ||
| + | |||
| + | # die Methode die den ==-Befehl korrekt umsetzt. | ||
| + | def __eq__(self, | ||
| + | # zuerst prüfen, ob das Objekt überhaupt " | ||
| + | if isinstance(other_object, | ||
| + | return self.first_name == other_object.first_name and self.last_name == other_object.first_name | ||
| + | # danach prüfen, ob das evtl. ein konstanter Wert vorliegt, der zu prüfen ist. | ||
| + | elif isinstance(other_object, | ||
| + | return self.first_name + ' ' + self.last_name == other_object | ||
| + | else: | ||
| + | return False | ||
| + | |||
| + | |||
| + | |||
| + | if __name__ == ' | ||
| + | carla = Person(' | ||
| + | theo = Person(' | ||
| + | |||
| + | if carla == theo: | ||
| + | print(f' | ||
| + | else: | ||
| + | print(f' | ||
| + | if carla == "Carla Meier": | ||
| + | print(f' | ||
| + | </ | ||
| + | |||
| + | ---- | ||
| + | < | ||
| + | < | ||
| + | GitHub Repository https:// | ||
| + | |||
| + | //Lernende am BZZ müssen den Link zum GitHub Classroom Assignment verwenden// | ||
| + | |||
| + | </ | ||
| + | {{tag> | ||
| + | [[https:// | ||