Erklärung zur Lektion
Nach dieser Lektion kannst du:
self auf das aktuelle Objekt zugreifen.Wenn du Klassen in Java oder C# verwendet hast, ist dir die Grundidee von Python vertraut: Eine Klasse definiert einen Objekttyp, und eine Instanz ist ein bestimmtes Objekt dieser Klasse. Python verwendet einen Doppelpunkt und Einrückung statt geschweifter Klammern:
class Server:
passVorerst gibt pass der Klasse einen gültigen, leeren Körper. Ein Objekt erstellst du, indem du den Klassennamen aufrufst: server = Server(). Mit der Punktnotation kannst du Felder, sogenannte Attribute, direkt an diese Instanz anhängen: server.region = "eu". Zwei Instanzen können unterschiedliche Werte halten, ohne sich gegenseitig zu beeinflussen.
Eine Methode ist eine Funktion, die innerhalb einer Klasse geschrieben wird. Eine Instanzmethode deklariert self als ersten Parameter. Wenn du server.label() aufrufst, übergibt Python server automatisch als self. Innerhalb der Methode bedeutet self.region die Region des bestimmten Objekts, das den Aufruf erhält. Methoden können auch Instanzattribute aktualisieren.
In dieser ersten Lektion weisen wir Attribute zu, nachdem wir jedes Objekt erstellt haben, damit du das Objektmodell klar erkennen kannst. In der nächsten Lektion zeigt __init__, wie du Attribute initialisierst, wenn ein Objekt erstellt wird. Klassenattribute und Vererbung behandeln wir später.
Eine leere Klasse genügt, um Instanzen zu erstellen und an jede unterschiedliche Werte anzuhängen.
class Endpoint:
pass
public = Endpoint()
public.path = "/public"
internal = Endpoint()
internal.path = "/internal"
print(public.path)
print(internal.path)Ausgabe:
/public
/internalDie beiden path-Attribute gehören zu verschiedenen Objekten.
Dieselbe Methode kann für jede Instanz ein anderes Ergebnis liefern, weil self auf das Objekt verweist, das sie aufgerufen hat.
class Printer:
def label(self):
return f"{self.name} ({self.region})"
first = Printer()
first.name = "labels"
first.region = "eu"
print(first.label())Ausgabe:
labels (eu)Die Methode verwendet die an first angehängten Attribute.
Eine Methode kann ein Attribut über self ändern. Diese Änderung bleibt bei diesem Objekt.
class Counter:
def record(self):
self.total += 1
counter = Counter()
counter.total = 0
counter.record()
counter.record()
print(f"Total: {counter.total}")Ausgabe:
Total: 2Das Attribut total wurde erstellt, bevor record() es verwendete. Die nächste Lektion macht diese Einrichtung zuverlässiger.
| Ziel | Python |
|---|---|
| Eine Klasse definieren | class Worker: |
| Einen leeren Körper gültig halten | pass |
| Eine Instanz erstellen | worker = Worker() |
| Ein Instanzattribut zuweisen | worker.name = "api" |
| Ein Attribut lesen | worker.name |
| Eine Instanzmethode definieren | def label(self): |
| Das aufrufende Objekt in einer Methode verwenden | self.name |
self in einer Methode: Normale Instanzmethoden brauchen es als ersten Parameter.self.name, nicht nur name, um das Attribut dieser Instanz zu lesen.first.status ändert second.status nicht.AttributeError auslösen.