Initialisieren der Klasse
Eigenschaften einer Klasse müssen initialisiert werden. Wir wollen also die Einführung der Benennung unserer Eigenschaften, damit wir später darauf zugreifen können.
In unserer Klasse sollen folgende Eigenschaften vorhanden sein:
Eigenschaften:
- Farbe
- Alter
- Rufname
Bisher haben wir nur unseren Rumpf unserer Klasse „BauplanKatzenKlasse“ erstellt.
class BauplanKatzenKlasse():
""" Klasse für das Erstellen von Katzen
Hilfetext ideal bei mehreren Programmierern in
einem Projekt oder bei schlechtem Gedächtnis """
Jetzt wollen wir unsere Eigenschaften einführen. Dazu wird ein neuer eingerückter Block erstellt, der immer den gleichen Aufruf hat: def __init__(self, …):
. Folgend für unsere Katzen-Klasse:
class BauplanKatzenKlasse():
""" Klasse für das Erstellen von Katzen
Hilfetext ideal bei mehreren Programmierern in
einem Projekt oder bei schlechtem Gedächtnis """
def __init__(self, rufname, farbe, alter):
self.rufname = rufname
self.farbe = farbe
self.alter = alter
Unserer Methode __init__
wird immer mit 2 Unterstrichen am Anfang und am Ende geschrieben. In der Klammer kommt als erstes Argument immer „self“! Hier kommt ein wichtiges Prinzip zum Tragen, dass Klassen so stark macht.
Dazu müssen wir kurz vorgreifen und uns ein Objekt erstellen. Bauen wir unsere erste Katze mit dem Namen „Sammy“, die orange ist und 3 Jahre alt.
class BauplanKatzenKlasse():
""" Klasse für das Erstellen von Katzen
Hilfetext ideal bei mehreren Programmierern in
einem Projekt oder bei schlechtem Gedächtnis """
def __init__(self, rufname, farbe, alter):
self.rufname = rufname
self.farbe = farbe
self.alter = alter
katze_sammy = BauplanKatzenKlasse("Sammy", "orange", 3)
__self__
verstehen (WICHTIG!)
Was passiert nun da genau? Am besten ist dies an folgender Zeichnung nachzuverfolgen:
Wenn wir das Objekt „katze_sammy“ der Klasse „BauplanKatzenKlasse“ erstellen, wird der Objektname „katze_sammy“ als erstes Argument in die „__init__(self)“ übergeben. Rufen wir dann später Attribute der Klasse ab, machen wir das wieder über unseren Objektnamen „katze_sammy“, die über „self.alter“ auf den Wert von Alter zugreift.
Sehr schön sieht man auch die Auswirkungen unseren bisherigen Codes beim Live-Editor (python-online-lern-editor.htm):
und in groß:
Jetzt können wir das Alter über unsere Instanz (sprich Objekt) „katze_sammy“ abrufen:
katze_sammy = BauplanKatzenKlasse("Sammy", "orange", 3)
print(katze_sammy.alter)
Als Rückgabewert erhalten wir:
3
Hier sieht man schön die Gewichtigkeit von self
sowohl beim „Befüllen“ unsere Klasse, wie beim Erzeugen eines Objekts und letztendlich auch immer beim Abruf von Attributen (wie im Beispiel das Alter oder den Rufnamen).
Zeit zum Üben!
Aufgabe: eine Klasse für Autos erstellen
Aus didaktischen Gründen basteln wir in dieser Aufgabe eine Klasse für Autos. Das liegt nicht daran, dass Autos irgendwie wichtig wären (in der aktuellen Diskussion zur Umwelt), sondern daran, dass sich jeder etwas unter Autos vorstellen kann und dies daher griffige Beispiele ergibt.
Wer mag, darf die folgenden Beispiele auch mit Fahrrädern oder was auch immer durchführen.
Erste Überlegung:
- wie benenne ich meine Klasse
- welche Eigenschaften (und später Methoden) sollen meine „Autos“ bekommen?
Bitte eine Klasse erstellen mit mindestens dem Wert „Farbe“ und ein Objekt erstellen und darüber die Farbe abrufen.