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:// |