Python Tutorial
- jetzt Python programmieren lernen

Instanz einer Klasse anlegen

Im letzten Kapitel haben wir bereits eine Instanz unserer Klasse „BauplanKatzenKlasse“ angelegt. Hier nun die Feinheiten. Unser bisheriger Code der Klasse Katze:

class BauplanKatzenKlasse():
    """ Klasse für das Erstellen von Katzen """

    def __init__(self, rufname, farbe, alter):
        self.rufname = rufname
        self.farbe   = farbe
        self.alter   = alter

Und zum Anlegen einer Instanz (sprich ein Objekt) hatten wir folgenden Aufruf:

katze_sammy = BauplanKatzenKlasse("Sammy", "orange", 3)

Extrem gut sieht man die internen Auswirkungen des Codes bei der Nutzung des Live-Editor (https://www.python-lernen.de/python-online-lern-editor.htm):

was Intern in Python bei Nutzen von Klassen/Objekten passiert
was Intern in Python bei Nutzen von Klassen/Objekten passiert

Wir haben die erste Instanz angelegt – unser erstes Objekt lebt.

Schauen wir uns weitere Möglichkeiten an.

Vorgabewerte für Eigenschaften festlegen

Beim Anlegen einer Klasse wäre es praktisch, auch bereits Vorgabewerte festlegen zu können. So könnte man sich ja vorstellen, dass man die Katzen immer „frisch geschlüpft“ bekommt. Somit hätten die als Alter einfach 0.

Genau das wollen wir zum Testen für das Alter als Vorgabewert hinterlegen.

Hier kommt wieder unsere __init__()-Methode zum Tragen. Wir können Eigenschaften mit Vorgabewert erweitern. Das kann man, muss aber nicht. Im Beispiel machen wir es nur für die Eigenschafte „alter“.

def __init__(self, rufname, farbe, alter=0):

Intern im Speicher ist nun beim Alter die 0 als Standard-Argument hinterlegt:

Vorgabewert über __init__
Vorgabewert über __init__

Erstellen wir unsere Instanz (Objekt) mit einer Angabe vom Alter, wird dieses genommen. Diese Angabe hat immer Vorrang.

Tragen wir allerdings beim Initialisieren nichts ein, dann kommt der Vorgabewert zum Zug. So könnten wir auch noch festlegen, dass die meisten Katzen schwarz sind (das weiß man doch, wenn man dem Sprichwort glaub).

def __init__(self, rufname, farbe="schwarz", alter=0):

Erstellen wir nun ein neues Objekt „katze_karlo“ nur mit seinem Rufnamen, erhält dieser die Vorgabewerte zugewiesen:

katze_sammy = BauplanKatzenKlasse("Sammy", "orange", 3)
katze_karlo = BauplanKatzenKlasse("Karlchen")

Wir haben nun 2 Katzen:

Objekt erzeugt mit Vorgabewerte
Objekt erzeugt mit Vorgabewerte

Und natürlich sind genau deshalb in dieser Sekunde irgendwo auf der Welt (und natürlich in Ihrem Computer) zwei Katzen entstanden. High five sage ich da nur!

2 Objekte - mit Vorgabewerte erzeugt
2 Objekte - mit Vorgabewerte erzeugt

Wichtig bei Vorgabewerten in Klassen

Sehr wichtig bei der Vergabe von Vorgabewerte ist die Platzierung innerhalb von __init__. Unsere Vorgabewerte müssen immer am Ende kommen!

Haben wir beispielsweise nur die Farbe als Vorgabewert und nicht das Alter, kommt eine Fehlermeldung. Folgender Code geht schief!

def __init__(self, rufname, farbe="schwarz", alter):

Als Fehlermeldung erhalten wir dann: „SyntaxError: non-default argument follows default argument“