no way to compare when less than two revisions

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.


de:modul:m319:learningunits:lu12:property [2025/06/23 07:45] (aktuell) – ↷ Seite von modul:m319:learningunits:lu12:property nach de:modul:m319:learningunits:lu12:property verschoben msuter
Zeile 1: Zeile 1:
 +====== LU12d - Property (erweitert) ======
 +<WRAP center round info 60%>
 +Dieses Thema ist ein Blick in die Objektorientierte Programmierung im Modul 320.
  
 +Mit ''@property'' und ''@attribut.setter'' kann eine Klasse den Zugriff auf die Attribute kontrollieren.
 +Dieses Prinzip nennt sich ''Data Hiding''.
 +</WRAP>
 +
 +===== property und setter =====
 +<code python>
 +    ...
 +    @property
 +    def firstname(self):
 +        return self._firstname
 +
 +    @firstname.setter
 +    def firstname(self, value):
 +        self._firstname = value
 +    ...
 +</code>
 +
 +
 +Wenn wir eine Klasse programmieren, wollen wir das Lesen und Schreiben von Attributen kontrollieren.
 +Die Kontrolle ob und wie die Werte der Attribute geändert werden können soll in der Hand der Klasse bleiben.
 +Deshalb schreiben wir zu jedem Attribut eine //Getter-// und eine //Setter-//Methode.
 +
 +Will ein andere Programmteil den Wert eines Attributs lesen, erfolgt dies über die sogenannte ''Getter''-Methode.
 +Diese Methode wird mit dem Decorator ''@property'' definiert.
 +Im einfachsten Fall gibt diese Methode einfach den Wert des Attributs an den Aufrufer zurück.
 +**Beachten Sie den Underscore vor dem Variablennamen, z.B. _firstname**
 +
 +In komplexeren Klassen werden einzelne Getter auch eine Verarbeitungslogik beinhalten.
 +Für unsere Programme reichen aber einfache Getter.
 +
 +Um den Wert eines Attributs zu ändern, stellt unsere Klasse eine ''Setter''-Methode bereit.
 +Diese Methode wird mit ''@attributname.setter'' definiert.
 +Deren Aufgabe ist es, den Wert eines Attributs zu ändern.
 +Auch hier beschränken wir uns vorerst auf die Grundaufgabe: Nimm den ''value'' und speichere ihn.
 +**Beachten Sie den Underscore vor dem Variablennamen, z.B. _firstname**
 +
 +<WRAP center round info 60%>
 +Um das Erstellen von ''property'' und ''setter'' zu vereinfachen, gibt es in PyCharm sogenannte "Live Templates".
 +Eine kurze Anleitung zum Erstellen eines solchen Live Templates finden Sie unter [[https://it.bzz.ch/wikiV2/howto/pycharm/property]]
 +</WRAP>
 +
 +Die vollständige Klasse würde dann so aussehen:
 +
 +<file python member.py>
 +from dataclasses import dataclass
 +
 +
 +@dataclass
 +class Member:
 +    """
 +    a club member
 +    """
 +    firstname: str
 +    lastname: str
 +    address: str
 +    place: str
 +    zip_code: str
 +    entry_year: int
 +    birth_year: int
 +    honorary_member: bool
 +
 +    @property
 +    def firstname(self):
 +        return self._firstname
 +
 +    @firstname.setter
 +    def firstname(self, value):
 +        self._firstname = value
 +
 +    @property
 +    def lastname(self):
 +        return self._lastname
 +
 +    @lastname.setter
 +    def lastname(self, value):
 +        self._lastname = value
 +
 +    @property
 +    def address(self):
 +        return self._address
 +
 +    @address.setter
 +    def address(self, value):
 +        self._address = value
 +
 +    @property
 +    def place(self):
 +        return self._place
 +
 +    @place.setter
 +    def place(self, value):
 +        self._place = value
 +
 +    @property
 +    def zip_code(self):
 +        return self._zip_code
 +
 +    @zip_code.setter
 +    def zip_code(self, value):
 +        self._zip_code = value
 +
 +    @property
 +    def birth_year(self):
 +        return self._birth_year
 +
 +    @birth_year.setter
 +    def birth_year(self, value):
 +        self._birth_year = value
 +
 +    @property
 +    def entry_year(self):
 +        return self._entry_year
 +    
 +    @entry_year.setter
 +    def entry_year(self, value):
 +        self._entry_year = value
 +
 +    @property
 +    def honorary_member(self):
 +        return self._honorary_member
 +
 +    @honorary_member.setter
 +    def honorary_member(self, value):
 +        self._honorary_member = value
 +
 +if __name__ == '__main__':
 +    test_person = Person()
 +    test_person.firstname = 'Hans'
 +    print(test_person)
 +</file>
  • de/modul/m319/learningunits/lu12/property.txt
  • Zuletzt geändert: 2025/06/23 07:45
  • von msuter