CodeGym /Kurse /Python SELF DE /Objektinitialisierung

Objektinitialisierung

Python SELF DE
Level 15 , Lektion 4
Verfügbar

4.1 Initialisierung

Normalerweise sind Objekte direkt nach dem Erstellen noch nicht einsatzbereit. Zuerst müssen alle notwendigen Daten übergeben werden: Arbeitsparameter, Startwerte, Referenzen zu anderen Objekten usw.

Dieser Prozess wird Initialisierung genannt und sollte direkt nach der Erstellung des Objekts stattfinden.

Angenommen, du hast eine Klasse Katze (Cat) und möchtest ihr einen Namen und ein Alter zuweisen, kann dies auf mehrere Arten erfolgen:

Initialisierung von Attributen nach der Objekterstellung

In diesem Beispiel wird zuerst erstellt:

  • ein leeres Cat-Objekt.
  • eine Instanz der Klasse Cat mit dem Namen barsik.
  • und dann werden dem Objekt barsik zwei Attribute hinzugefügt: name und age werden direkt zum Objekt hinzugefügt.


class Cat:
    pass
        

# Erstellen eines Cat-Objekts
barsik = Cat()
        
# Initialisierung von Attributen nach der Objekterstellung
barsik.name = "Barsik"
barsik.age = 5
        
print(f"Name der Katze: {barsik.name}, Alter: {barsik.age}")  # Ausgabe: Name der Katze: Barsik, Alter: 5

Verwendung einer Methode zur Initialisierung von Attributen

In diesem Beispiel wird eine Methode initialize zur Initialisierung der Attribute verwendet. Das Cat-Objekt wird ohne ein einziges Attribut erstellt, und dann wird die Methode initialize() verwendet, um die Attributwerte festzulegen.


class Cat:
    def initialize(self, name, age):
        self.name = name
        self.age = age
        

# Erstellen eines Cat-Objekts
barsik = Cat()
        
# Initialisierung von Attributen über eine Methode
barsik.initialize("Barsik", 5)
        
print(f"Name der Katze: {barsik.name}, Alter: {barsik.age}")  # Ausgabe: Name der Katze: Barsik, Alter: 5

Verwendung von Klassenfeldern

In diesem Beispiel sind die Attribute name und age auf Klassenebene definiert. Nach der Erstellung des Objekts barsik werden die Attribute direkt initialisiert.


class Cat:
    name = ""
    age = 0
        

# Erstellen eines Cat-Objekts
barsik = Cat()
        
# Initialisierung von Objektattributen
barsik.name = "Barsik"
barsik.age = 5
        
print(f"Name der Katze: {barsik.name}, Alter: {barsik.age}")  # Ausgabe: Name der Katze: Barsik, Alter: 5

Welcher Weg ist besser? Keiner! Am besten ist es, einen Konstruktor zu nutzen :)

4.2 Konstruktor

Ein Konstruktor ist eine spezielle Methode, die automatisch beim Erstellen eines neuen Objekt der Klasse aufgerufen wird. Der Konstruktor wird verwendet, um die Felder des Objekts zu initialisieren und kann alle notwendigen Anfangsaktionen durchführen, die zur Konfiguration des Objekts erforderlich sind.

In Python ist der Konstruktor die Methode namens __init__. Hier sind die wichtigsten Fakten darüber:

  • Die Methode __init__ ist der Konstruktor in Python. Sie wird automatisch aufgerufen, wenn eine neue Klasseninstanz erstellt wird.
  • __init__ akzeptiert mindestens einen Parameter — self, der sich auf das erstellte Objekt bezieht. Zusätzlich können weitere Parameter übergeben werden, um die Attribute des Objekts zu initialisieren.
  • Innerhalb der Methode __init__ können Anfangswerte der Objektattribute unter Verwendung von self festgelegt werden.
  • Der Konstruktor kann alle notwendigen Aktionen durchführen, die zur Konfiguration des Objekts erforderlich sind, wie z.B. die Validierung von Eingabedaten oder das Setzen von Verbindungen zu anderen Objekten.

Die Parameter werden dem Konstruktor automatisch übergeben, du musst sie nur innerhalb der runden Klammern beim Erstellen des Objekts angeben.

So sieht die Initialisierung unserer Katze mit einem Konstruktor aus:


class Cat:
    def __init__(self, name, age):
        self.name = name
        self.age = age


# Erstellen eines Cat-Objekts mit Namen und Alter
barsik = Cat("Barsik", 5)

print(f"Name der Katze: {barsik.name}, Alter: {barsik.age}")  # Ausgabe: Name der Katze: Barsik, Alter: 5

Nach der Erstellung eines Objekts vom Typ Cat wird automatisch die Methode __init__ aufgerufen, und es werden drei Parameter übergeben:

  • Referenz auf das Objekt barsik im Parameter self
  • Der String „Barsik“ im Parameter name
  • Die Zahl 5 im Parameter age

Das ist bequem und schön.

Datenvalidierung

Auch im Konstruktor kann die Datenvalidierung durchgeführt werden. Denn das Ziel des Konstruktors ist es, ein valides (korrrektes) Objekt zu erstellen, mit dem weitergearbeitet werden kann. Beispiel:


class Cat:
    def __init__(self, name, age):
        if age < 0: raise ValueError("Das Alter kann nicht negativ sein")
        self.name = name
        self.age = age


# Erstellen eines Cat-Objekts mit Altersprüfung
try:
    barsik = Cat("Barsik", -3)
except ValueError as e:
    print(e)  # Ausgabe: Das Alter kann nicht negativ sein
               
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION