Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen Revision Vorhergehende Überarbeitung | |||
| de:modul:m320_2024:learningunits:lu04:dataclass [2026/08/30 14:05] – gelöscht - Externe Bearbeitung (Unbekanntes Datum) 127.0.0.1 | de:modul:m320_2024:learningunits:lu04:dataclass [2026/08/30 14:05] (aktuell) – ↷ Seite von modul:m320_2024:learningunits:lu04:dataclass nach de:modul:m320_2024:learningunits:lu04:dataclass verschoben msuter | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| + | ====== LU04b - Konstruktor in Dataclass ====== | ||
| + | <WRAP center round info 60%> | ||
| + | In einer Dataclass wird der Konstruktor anhand der Attribute automatisch generiert. | ||
| + | Falls Sie eigene Zusicherungen im | ||
| + | </ | ||
| + | |||
| + | ===== Konstruktor ===== | ||
| + | In einer '' | ||
| + | Python erzeugt automatisch einen Konstruktor mit allen Parametern und Wertzuweisungen. | ||
| + | |||
| + | ==== Beispiel ==== | ||
| + | |||
| + | <code python> | ||
| + | @dataclass | ||
| + | class Member: | ||
| + | givenname: str | ||
| + | birth_year: int | ||
| + | membership_fee: | ||
| + | </ | ||
| + | Die oben definierte Klasse erzeugt automatisch diesen Konstruktor: | ||
| + | <code python> | ||
| + | ... | ||
| + | def __init__(self, | ||
| + | self.givenname = givenname | ||
| + | self.birth_year = birth_year | ||
| + | self.membership_fee = membership_fee | ||
| + | </ | ||
| + | |||
| + | ===== Zusicherungen und Programmlogik ===== | ||
| + | Manche Klassen verlangen nach expliziten Zusicherungen oder Logik beim Erzeugen eines Objekts. | ||
| + | Anstatt den Konstruktor von Hand zu schreiben, nutzen wir dafür die Methode '' | ||
| + | Diese Methode, sofern vorhanden, wird am Ende des Konstruktors aufgerufen. | ||
| + | |||
| + | ==== Beispiel ==== | ||
| + | In unserem Beispiel wollen wir sicherstellen, | ||
| + | <code python> | ||
| + | ... | ||
| + | def __post_init__(self): | ||
| + | if self.membership_fee < 0: | ||
| + | raise ValueError(' | ||
| + | </ | ||
| + | |||
| + | ===== Attribute ohne Initialwert ===== | ||
| + | Jenachdem können Klassen Attribute haben, deren Werte nicht durch den Aufrufer gesetzt werden. | ||
| + | Solche Attribute können mit '' | ||
| + | |||
| + | ==== Beispiel ==== | ||
| + | |||
| + | <code python> | ||
| + | @dataclass | ||
| + | class Member: | ||
| + | givenname: str | ||
| + | birth_year: int | ||
| + | membership_fee: | ||
| + | </ | ||
| + | |||
| + | In diesem Beispiel können beim Erzeugen (Instatiieren) eines Objekts nur der Vorname und das Geburtsjahr angegeben werden. | ||
| + | Der generierte Konstruktor sieht entsprechend so aus: | ||
| + | |||
| + | <code python> | ||
| + | ... | ||
| + | def __init__(self, | ||
| + | self.givenname = givenname | ||
| + | self.birth_year = birth_year | ||
| + | </ | ||
| + | ---- | ||
| + | {{tag> | ||
| + | [[https:// | ||