LU04b - Konstruktor in Dataclass

In einer Dataclass wird der Konstruktor anhand der Attribute automatisch generiert. Falls Sie eigene Zusicherungen im

In einer @dataclass definieren wir die Attribute mit ihren Datentypen. Python erzeugt automatisch einen Konstruktor mit allen Parametern und Wertzuweisungen.

@dataclass
class Member:
    givenname: str
    birth_year: int
    membership_fee: float

Die oben definierte Klasse erzeugt automatisch diesen Konstruktor:

...
    def __init__(self, givenname: str, birth_year: int, membership_fee: float):
        self.givenname = givenname
        self.birth_year = birth_year
        self.membership_fee = membership_fee

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 post_init(). Diese Methode, sofern vorhanden, wird am Ende des Konstruktors aufgerufen.

In unserem Beispiel wollen wir sicherstellen, dass der Mitgliederbeitrag nicht negativ sein kann.

...
    def __post_init__(self):
        if self.membership_fee < 0:
            raise ValueError('membership_fee may not be a negative value')

Jenachdem können Klassen Attribute haben, deren Werte nicht durch den Aufrufer gesetzt werden. Solche Attribute können mit field(init=False) ausgeschlossen werden.

@dataclass
class Member:
    givenname: str
    birth_year: int
    membership_fee: float = field(init=False)

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:

...
    def __init__(self, givenname: str, birth_year: int):
        self.givenname = givenname
        self.birth_year = birth_year

Marcel Suter

  • modul/m320_2024/learningunits/lu04/dataclass.txt
  • Zuletzt geändert: 2024/08/14 08:03
  • von msuter