Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
| modul:archiv:m320:learningunits:lu01:theorie:lu1-kapitel_6 [2026/08/30 14:06] – gelöscht - Externe Bearbeitung (Unbekanntes Datum) 127.0.0.1 | modul:archiv:m320:learningunits:lu01:theorie:lu1-kapitel_6 [2026/08/30 14:10] (aktuell) – ↷ Links angepasst, weil Seiten im Wiki verschoben wurden 74.7.243.195 | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| + | ==== 4. Ist Klasse gleich Klasse? ==== | ||
| + | Warum stellen wir uns diese Frage?\\ | ||
| + | \\ | ||
| + | Sie haben im Modul 319 in der LU12 ([[de: | ||
| + | In manchen Programmiersprachen oder Frameworks wird der Begriff " | ||
| + | Eine " | ||
| + | \\ | ||
| + | ---- | ||
| + | //Beispiel 1.3: Dataklasse und Standardklasse// | ||
| + | {{modul: | ||
| + | //Abb 1.7:// Beschreibung einer Person mit deren Adresse \\ | ||
| + | Wir finden in Abbbildung 1.7 die zwei Klassen '' | ||
| + | Die Klasse '' | ||
| + | * street | ||
| + | * number | ||
| + | * postal_code | ||
| + | * city | ||
| + | die durch set- und get-Methoden geschrieben (set) bzw. gelesen (get) werden. Weitere Methoden werden kaum benötigt. Es handelt sich hier um eine typische Datenklasse.\\ | ||
| + | Dagegen wird die Person durch eine Vielzahl von Eigenschaften wie z.B. | ||
| + | * size | ||
| + | * hair_color | ||
| + | * weight | ||
| + | * ... | ||
| + | und Methoden wie | ||
| + | * breath() | ||
| + | * eat() | ||
| + | * go() | ||
| + | * ... | ||
| + | beschrieben. Zu diesen Attributen finden sich dann auch wieder set- und get-Methoden. | ||
| + | \\ | ||
| + | ---- | ||
| + | Was aber bedeutet das nun für die Programmierung in Python?\\ | ||
| + | Wir betrachten uns hier die beiden Klassen '' | ||
| + | |||
| + | ---- | ||
| + | //Beispiel 1.4:// Codierung einer Datenklasse und einer " | ||
| + | {|style = " | ||
| + | |- | ||
| + | !style = " | ||
| + | !style = " | ||
| + | |- | ||
| + | |style=" | ||
| + | <code Python> | ||
| + | from dataclasses import dataclass | ||
| + | |||
| + | |||
| + | @dataclass | ||
| + | class Address: | ||
| + | """ | ||
| + | Beschreibt eine Privatadresse mit Strasse, Hausnummer, Postleitzahl | ||
| + | und Ort. | ||
| + | Die Attribute können über den Konstruktor und/oder die set-Methoden | ||
| + | geschrieben und über die get-Methoden gelesen werden. | ||
| + | """ | ||
| + | street: str = None | ||
| + | number: str = None # als Zeichenkette deklariert, | ||
| + | # da auch Hausnummern wie 11A möglich sind | ||
| + | postal_code: | ||
| + | city: str = None | ||
| + | |||
| + | # Durch den Dekorierer (Decorator) @dataclass sind sowohl Konstruktor | ||
| + | # wie auch get- und set-Methoden implizit verfügbar | ||
| + | # und müssen nicht extra angeschrieben werden. | ||
| + | |||
| + | |||
| + | """ | ||
| + | Hier folgt die main-Methode über die das Programm ausgeführt werden kann. | ||
| + | """ | ||
| + | |||
| + | if __name__ == ' | ||
| + | # Instanzieren eines Objektes über den Konstruktor. | ||
| + | # address ist eine Objekt-Variable, | ||
| + | # der Klasse ausführt, um das Objekt zu erzeugen | ||
| + | address = Address(street=' | ||
| + | number=' | ||
| + | postal_code=9999, | ||
| + | city=' | ||
| + | # | ||
| + | # Ausgabe der Werte über impliziten Aufruf der jeweiligen Methoden. | ||
| + | print(' | ||
| + | print(f' | ||
| + | f' | ||
| + | # | ||
| + | address.postal_code = 1001 # nutzen der set-Methoden | ||
| + | print(f' | ||
| + | f' | ||
| + | </ | ||
| + | |style=" | ||
| + | <code Python> | ||
| + | from address import Address | ||
| + | |||
| + | class Human: | ||
| + | """ | ||
| + | Beschreibt eine Person mit ihren Eigenschaften und Fähigkeiten. | ||
| + | Hier in einer gekürzten Version, da eine umfassende Beschreibung | ||
| + | zu viel Platz einnehmen würde. | ||
| + | """ | ||
| + | |||
| + | # Hier wird ein expliziter Konstruktor angeschrieben. | ||
| + | # Mehr zur Bedeutung des Konstruktors folgt später. | ||
| + | def __init__(self, | ||
| + | self._name | ||
| + | self._weight | ||
| + | self._eye_color = eye_color | ||
| + | # hier können ganz viele weitere Attribute stehen, die durch | ||
| + | # den Konstruktor initialisiert werden. | ||
| + | self._address = one_address #eine Referenz zu einem Address-Objekt | ||
| + | |||
| + | # Attribute werden über get-Methoden gelesen. | ||
| + | # Python kennt dazu den Dekorator @property. | ||
| + | # Hier als Beispiel drei Methoden. | ||
| + | @property | ||
| + | def weight(self): | ||
| + | return self._weight | ||
| + | |||
| + | @property | ||
| + | def name(self): | ||
| + | return self._name | ||
| + | |||
| + | @property | ||
| + | def address(self): | ||
| + | return self._address | ||
| + | |||
| + | # Attribute werden über set-Methoden gesetzt. | ||
| + | # ACHTUNG: Es gibt Attribute, die einmalig bei der Initialisierung | ||
| + | # gesetzt werden, hier z.B. die Augenfarbe. | ||
| + | # Python nutzt hier den @.setter Dekorator. | ||
| + | # Hier als Beispiel wieder nur eine Methode. | ||
| + | @address.setter | ||
| + | def address(self, | ||
| + | self._address = new_address | ||
| + | |||
| + | # Und hier folgen Methoden, die das Verhalten des Objekts | ||
| + | # beeinflussen. | ||
| + | def eat(self, what_ever): | ||
| + | | ||
| + | |||
| + | """ | ||
| + | Und nun ein Stück Programmcode, | ||
| + | """ | ||
| + | if __name__ == ' | ||
| + | address = Address(street=' | ||
| + | number=' | ||
| + | postal_code=9999, | ||
| + | city=' | ||
| + | milli = Human(' | ||
| + | milli.eat(' | ||
| + | print(f' | ||
| + | print(f' | ||
| + | print(f' | ||
| + | </ | ||
| + | |||
| + | |- | ||
| + | |style=" | ||
| + | Ausgabe: | ||
| + | <code > | ||
| + | Werte des Objekts address: | ||
| + | Musterstrasse 11A 9999 Musterdorf | ||
| + | Musterstrasse 11A 1001 Musterdorf | ||
| + | </ | ||
| + | |style=" | ||
| + | Ausgabe: | ||
| + | < | ||
| + | Name: Milli | ||
| + | Adresse: Address(street=' | ||
| + | Gewicht: 50.3 | ||
| + | </ | ||
| + | |||
| + | |- | ||
| + | |||
| + | |} | ||
| + | \\ | ||
| + | ---- | ||
| + | |||
| + | Sie haben nun an Hand der Klasse '' | ||
| + | Anmerkung: Sie können natürlich auch einer " | ||
| + | |||
| + | |||
| + | ---- | ||
| + | [[https:// | ||