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
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.
fido.abbaia()
# entspricht Cane.abbaia(fido)
# Python übergibt fido automatisch als selfInstanz- vs. Klassenattribute
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
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 # 0Probiere es aus
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()`.
Hinweis anzeigen
math.sqrt(self.x ** 2 + self.y ** 2)
Lösung nach 3 Versuchen verfügbar
Wiederholungsübung
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`.
Hinweis anzeigen
self.balance += amount bei deposit.
Lösung nach 3 Versuchen verfügbar
Zusätzliche Herausforderung
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()`.
Hinweis anzeigen
Denke daran, self zu verwenden, um innerhalb von area(self) auf die Attribute zuzugreifen.
Lösung nach 3 Versuchen verfügbar