Direkt zum Hauptinhalt springen
eLearner.app
Modul 7 · Lektion 1 von 425/36 im Kurs~14 min
Lektionen des Moduls (1/4)

Klassen und Instanzen

Eine Klasse ist ein Bauplan zur Erstellung von Objekten, die Daten (Attribute) und Verhalten (Methoden) besitzen. Eine Instanz ist ein konkretes Objekt, das aus der Klasse erstellt wurde.

Minimale Syntax

Python
class Cane:
    def __init__(self, nome, eta):
        self.nome = nome
        self.eta = eta

    def abbaia(self):
        return f"{self.nome} dice WOOF!"

# Erstellung von Instanzen
fido = Cane("Fido", 3)
luna = Cane("Luna", 5)

fido.nome       # 'Fido'
fido.abbaia()   # 'Fido dice WOOF!'

__init__: Der "Konstruktor"

Die Methode __init__ wird automatisch aufgerufen, wenn du eine Instanz erstellst (Cane("Fido", 3)). Sie wird verwendet, um die Attribute zu initialisieren.

Technisch gesehen ist sie kein Konstruktor (das Objekt wurde bereits von __new__ erstellt), aber es ist der Ort, an dem du den Anfangszustand festlegst.

self: Der erste Parameter

self ist die Referenz auf die Instanz, auf der die Methode aufgerufen wurde. Es ist eine Konvention (kein Schlüsselwort) und ist immer der erste Parameter von Instanzmethoden.

Python
fido.abbaia()
# entspricht Cane.abbaia(fido)
# Python übergibt fido automatisch als self

Instanz- vs. Klassenattribute

Python
class Cane:
    specie = "Canis familiaris"   # Klassenattribut (gemeinsam genutzt)

    def __init__(self, nome):
        self.nome = nome           # Instanzattribut (für jede Instanz individuell)

fido = Cane("Fido")
luna = Cane("Luna")

fido.nome       # 'Fido'        (Instanz)
luna.nome       # 'Luna'        (Instanz)
fido.specie     # 'Canis familiaris'  (wird auf der Klasse gesucht)
Cane.specie     # 'Canis familiaris'

Mehrere Methoden und Zustand

Python
class Contatore:
    def __init__(self, inizio=0):
        self.valore = inizio

    def incrementa(self, di=1):
        self.valore += di

    def reset(self):
        self.valore = 0

c = Contatore()
c.incrementa()
c.incrementa(di=5)
c.valore       # 6
c.reset()
c.valore       # 0

Probiere es aus

Übung#python.m7.l1.e1
Versuche: 0Wird geladen…

Definiere eine Klasse `Point` mit __init__(self, x, y), die die Attribute speichert. Füge eine Methode `distance_from_origin` hinzu, die die Quadratwurzel aus x^2 + y^2 zurückgibt. Erstelle `p = Point(3, 4)` und evaluiere `p.distance_from_origin()`.

Editor wird geladen…
Hinweis anzeigen

math.sqrt(self.x ** 2 + self.y ** 2)

Lösung nach 3 Versuchen verfügbar

Wiederholungsübung

Übung#python.m7.l1.e2
Versuche: 0Wird geladen…

Definiere `BankAccount` mit __init__(self, balance=0) und den Methoden `deposit(amount)`, `withdraw(amount)`, die self.balance verändern. Erstelle `a = BankAccount(100)`, zahle 50 ein, hebe 30 ab. Evaluiere `a.balance`.

Editor wird geladen…
Hinweis anzeigen

self.balance += amount bei deposit.

Lösung nach 3 Versuchen verfügbar

Zusätzliche Herausforderung

Übung#python.m7.l1.e3
Versuche: 0Wird geladen…

Definiere eine Klasse `Rectangle` mit einem Konstruktor `__init__(self, width, height)`, um Breite und Höhe festzulegen, und einer Methode `area(self)`, die das Produkt aus Breite und Höhe zurückgibt. Instanziiere ein Rechteck mit der Breite `4` und der Höhe `5` in `rect` und evaluiere `rect.area()`.

Editor wird geladen…
Hinweis anzeigen

Denke daran, self zu verwenden, um innerhalb von area(self) auf die Attribute zuzugreifen.

Lösung nach 3 Versuchen verfügbar