Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
| modul:m320_2024:learningunits:lu01:gleichartig [2024/04/18 18:15] – angelegt - Externe Bearbeitung 127.0.0.1 | modul:m320_2024:learningunits:lu01:gleichartig [2025/06/23 07:45] (aktuell) – ↷ Links angepasst, weil Seiten im Wiki verschoben wurden msuter | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| ====== LU01d - Ist Klasse gleich Klasse? ====== | ====== LU01d - Ist Klasse gleich Klasse? ====== | ||
| - | + | ||
| Warum stellen wir uns diese Frage? | Warum stellen wir uns diese Frage? | ||
| - | Sie haben im ([[modul: | + | Sie haben im ([[de:modul: |
| Dabei haben Sie eine Klasse als Ansammlung vieler Attribute kennengelernt. | Dabei haben Sie eine Klasse als Ansammlung vieler Attribute kennengelernt. | ||
| Man nennt solche Klassen (informell) auch Datenklassen (POPO - Plain Old Python Object). | Man nennt solche Klassen (informell) auch Datenklassen (POPO - Plain Old Python Object). | ||
| Zeile 12: | Zeile 12: | ||
| Eine " | Eine " | ||
| - | ---- | + | ==== Beispiel: Dataklasse und Standardklasse |
| - | === Beispiel: Dataklasse und Standardklasse === | + | |
| {{: | {{: | ||
| - | //Abb:// Beschreibung einer Person mit deren Adresse | + | //Abb. Beschreibung einer Person mit deren Adresse |
| Zeile 28: | Zeile 27: | ||
| - | 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. | + | 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. | Dagegen wird die Person durch eine Vielzahl von Eigenschaften wie z.B. | ||
| Zeile 42: | Zeile 43: | ||
| beschrieben. Zu diesen Attributen finden sich dann auch wieder set- und get-Methoden. | beschrieben. Zu diesen Attributen finden sich dann auch wieder set- und get-Methoden. | ||
| - | ---- | + | ==== Was aber bedeutet das für die Programmierung in Python? |
| - | + | ||
| - | Was aber bedeutet das nun für die Programmierung in Python?\\ | + | |
| Wir betrachten uns hier die beiden Klassen '' | Wir betrachten uns hier die beiden Klassen '' | ||
| - | |||
| - | ---- | ||
| === Beispiel: Codierung einer Datenklasse und einer " | === Beispiel: Codierung einer Datenklasse und einer " | ||
| Zeile 72: | Zeile 69: | ||
| # Durch den Decorator @dataclass wird unter anderem der Konstruktor generiert. | # Durch den Decorator @dataclass wird unter anderem der Konstruktor generiert. | ||
| + | @property | ||
| + | def street(self): | ||
| + | return self._street | ||
| + | @street.setter | ||
| + | def street(self, | ||
| + | self._street = value | ||
| - | """ | + | @property |
| - | Hier folgt die main-Methode über die das Programm ausgeführt werden kann. | + | def number(self): |
| - | """ | + | |
| - | if __name__ == ' | + | @number.setter |
| - | # Instanzieren eines Objektes über den Konstruktor. | + | |
| - | | + | self._postal_code = value |
| - | | + | |
| - | | + | |
| - | | + | |
| - | postal_code=9999, | + | |
| - | city=' | + | |
| - | # | + | @postal_code.setter |
| - | | + | def postal_code(self, value): |
| - | | + | |
| - | | + | |
| - | | + | |
| - | | + | |
| - | address.postal_code = 1001 # nutzen der set-Methoden | + | |
| - | | + | |
| - | | + | |
| + | | ||
| + | self._city = value | ||
| </ | </ | ||
| |style=" | |style=" | ||
| <code Python> | <code Python> | ||
| from address import Address | from address import Address | ||
| + | |||
| class Human: | class Human: | ||
| Zeile 108: | Zeile 114: | ||
| # Mehr zur Bedeutung des Konstruktors folgt später. | # Mehr zur Bedeutung des Konstruktors folgt später. | ||
| def __init__(self, | def __init__(self, | ||
| - | self._name | + | self._name = name |
| - | self._weight | + | self._weight = weight |
| self._eye_color = eye_color | self._eye_color = eye_color | ||
| # hier können ganz viele weitere Attribute stehen, die durch | # hier können ganz viele weitere Attribute stehen, die durch | ||
| # den Konstruktor initialisiert werden. | # den Konstruktor initialisiert werden. | ||
| - | self._address = one_address #eine Referenz zu einem Address-Objekt | + | self._address = one_address |
| + | |||
| + | def __repr__(self): | ||
| + | return f' | ||
| # Attribute werden über get-Methoden gelesen. | # Attribute werden über get-Methoden gelesen. | ||
| Zeile 125: | Zeile 134: | ||
| def name(self): | def name(self): | ||
| return self._name | return self._name | ||
| + | |||
| + | @property | ||
| + | def eye_color(self): | ||
| + | return self._eye_color | ||
| @property | @property | ||
| Zeile 142: | Zeile 155: | ||
| # beeinflussen. | # beeinflussen. | ||
| def eat(self, what_ever): | def eat(self, what_ever): | ||
| - | self._weight += 0.3 | + | |
| + | </ | ||
| + | |- | ||
| + | |style=" | ||
| + | <code python> | ||
| + | """ | ||
| + | Hier folgt die main-Methode über die das Programm ausgeführt werden kann. | ||
| + | """ | ||
| + | if __name__ == ' | ||
| + | # Instanzieren eines Objektes über den Konstruktor. | ||
| + | # my_home ist eine Objekt-Variable, | ||
| + | # der Klasse ausführt, um das Objekt zu erzeugen | ||
| + | my_home = Address(street=' | ||
| + | number=' | ||
| + | postal_code=9999, | ||
| + | city=' | ||
| + | |||
| + | my_home.postal_code = 1001 # nutzen der setter-Methode | ||
| + | # Ausgabe der Werte über impliziten Aufruf der jeweiligen property-Methoden. | ||
| + | print(' | ||
| + | print(f' | ||
| + | f' | ||
| + | |||
| + | print(my_home) | ||
| + | </ | ||
| + | |style=" | ||
| + | <code python> | ||
| """ | """ | ||
| Und nun ein Stück Programmcode, | Und nun ein Stück Programmcode, | ||
| """ | """ | ||
| if __name__ == ' | if __name__ == ' | ||
| - | address = Address(street=' | + | address = Address(street=' |
| - | number=' | + | number=' |
| - | postal_code=9999, | + | postal_code=9999, |
| city=' | city=' | ||
| - | milli | + | milli = Human(' |
| - | milli.eat(' | + | milli.eat(' |
| print(f' | print(f' | ||
| print(f' | print(f' | ||
| - | print(f' | + | print(f' |
| + | |||
| + | print(milli) | ||
| </ | </ | ||
| - | |||
| |- | |- | ||
| |style=" | |style=" | ||
| Zeile 164: | Zeile 204: | ||
| <code > | <code > | ||
| Werte des Objekts address: | Werte des Objekts address: | ||
| - | Musterstrasse 11A 9999 Musterdorf | ||
| Musterstrasse 11A 1001 Musterdorf | Musterstrasse 11A 1001 Musterdorf | ||
| + | Address(street=' | ||
| </ | </ | ||
| |style=" | |style=" | ||
| Zeile 171: | Zeile 211: | ||
| < | < | ||
| Name: Milli | Name: Milli | ||
| - | Adresse: Address(street=' | + | Adresse: Address(street=' |
| Gewicht: 50.3 | Gewicht: 50.3 | ||
| + | Human(name=' | ||
| </ | </ | ||
| - | |||
| |- | |- | ||
| |} | |} | ||
| - | \\ | ||
| - | ---- | ||
| - | Sie haben nun an Hand der Klasse '' | + | |
| - | Anmerkung: Sie können natürlich auch einer " | + | Sie haben nun an Hand der Klasse '' |
| + | Ebenso könenn Sie feststellen, | ||
| + | |||
| + | Anmerkung: Sie können natürlich auch einer " | ||
| ---- | ---- | ||
| - | [[https:// | + | [[https:// |