Python: Klassen: Unterschied zwischen den Versionen
Flinh1 (Diskussion | Beiträge) (→Instanzen als Attribute einer Klasse) |
Flinh1 (Diskussion | Beiträge) (→Vererbung) |
||
Zeile 30: | Zeile 30: | ||
---- | ---- | ||
+ | |||
+ | == Getter, Setter, property == | ||
+ | * Getter ermöglichen eine modifiziert Ausgabe, z. B. Rundung oder Formatierung | ||
+ | * Setter erlauben einen kontrollierten Zugriff, z. B. einschränkende Bedingungen | ||
+ | * Ausschließlich lesbare Propertys: wenn ein Wert nur über Klassenmethoden geändert wird (z. B. Kontostand, Kilometerstand). | ||
+ | <nowiki> | ||
+ | class Auto: | ||
+ | def __init__(self): | ||
+ | print("Ein Auto!") | ||
+ | self._wischerstellung = 0 | ||
+ | |||
+ | def get_wischerstellung(self): | ||
+ | print("Hier die Wischerstellung") | ||
+ | return self._wischerstellung | ||
+ | |||
+ | def set_wischerstellung(self, wisch): | ||
+ | if wisch >= 0 and wisch <=4: | ||
+ | print(f"Setze Wischerstellung {wisch}") | ||
+ | self._wischerstellung = wisch | ||
+ | else: | ||
+ | print("Unerlaubter Bereich") | ||
+ | |||
+ | wischerstellung = property(get_wischerstellung,set_wischerstellung) | ||
+ | |||
+ | peugeot = Auto() | ||
+ | peugeot.wischerstellung = 2 | ||
+ | print(peugeot._wischerstellung) | ||
+ | peugeot.set_wischerstellung(5) | ||
+ | print(peugeot._wischerstellung) | ||
+ | </nowikiki> | ||
== Vererbung == | == Vererbung == |
Version vom 12. November 2020, 20:07 Uhr
Inhaltsverzeichnis
Allgemeines
Beispiel für Klasse und ihre Instanziierung:
class Tiere: def bewegen(self): print("Ich bewege mich") def fressen(self): print("Ich fresse.") class Rind(Tiere): def __init__(self, flecken): self.kuhflecken = flecken def findeFutter(self): self.bewegen() print("Ich habe Futter gefunden!") self.fressen() elsa = Rind(20) print("Anzahl der Flecken:", elsa.kuhflecken) elsa.findeFutter()
Getter, Setter, property
- Getter ermöglichen eine modifiziert Ausgabe, z. B. Rundung oder Formatierung
- Setter erlauben einen kontrollierten Zugriff, z. B. einschränkende Bedingungen
- Ausschließlich lesbare Propertys: wenn ein Wert nur über Klassenmethoden geändert wird (z. B. Kontostand, Kilometerstand).
class Auto: def __init__(self): print("Ein Auto!") self._wischerstellung = 0 def get_wischerstellung(self): print("Hier die Wischerstellung") return self._wischerstellung def set_wischerstellung(self, wisch): if wisch >= 0 and wisch <=4: print(f"Setze Wischerstellung {wisch}") self._wischerstellung = wisch else: print("Unerlaubter Bereich") wischerstellung = property(get_wischerstellung,set_wischerstellung) peugeot = Auto() peugeot.wischerstellung = 2 print(peugeot._wischerstellung) peugeot.set_wischerstellung(5) print(peugeot._wischerstellung) </nowikiki> == Vererbung == === Grundschema === <nowiki> class Elektroauto(Auto): def __init__(self, make, model, year): super().__init__(make, model,year)
Die Funktion super() weist Python an, die Funktion __init__ der Elternklasse aufzurufen.
Instanzen als Attribute einer Klasse
Die Instanz einer Klasse (hier: Klasse Batterie) kann in einer anderen Klasse als Attribut dienen:
class Auto: def __init__(self, make, model, year): self.batterie = Batterie()
Die Methode einer Instanz von Auto könnte für die Batterie dann so lauten:
bmw1 = Auto() bmw1.batterie.methode()
Klassenmethoden
Klassenmethoden sind nicht an ein Objekt, sondern an eine Klasse gebunden. Im Gegensatz zu statischen Methoden arbeiten Klassenmethoden mit der Klasse, da sie als Parameter immer die Klasse selbst haben.
class Person: age = 25 def printAge(cls): print('The age is:', cls.age) # create printAge class method Person.printAge = classmethod(Person.printAge) Person.printAge()
Ausgabe:
The age is: 25
| |