Einführung
In diesem Lab lernen Sie die grundlegenden Konzepte der objektorientierten Programmierung (OOP) in Python kennen. Wir werden untersuchen, wie man Klassen definiert, die als Baupläne für die Erstellung von Objekten dienen, und das Verhältnis zwischen Klassen und Objekten verstehen.
Sie werden praktische Erfahrungen sammeln, indem Sie Instanzen Ihrer definierten Klassen erstellen und verwenden. Das Lab führt Sie durch die Initialisierung von Objekten mit der __init__-Methode, um ihren Anfangszustand festzulegen, und die Anpassung ihrer String-Darstellung mithilfe der __repr__-Methode für bessere Debugging-Möglichkeiten und Lesbarkeit.
Eine Klasse definieren und eine Instanz erstellen
In diesem Schritt lernen Sie, wie man eine einfache Klasse definiert und ein Objekt, oder eine Instanz, davon erstellt.
In der objektorientierten Programmierung ist eine Klasse ein Bauplan zur Erstellung von Objekten. Sie definiert eine Reihe von Attributen (Daten) und Methoden (Funktionen), die die erstellten Objekte besitzen werden. Ein Objekt ist eine Instanz einer Klasse, eine konkrete Entität, die nach dem Bauplan der Klasse erstellt wurde.
Beginnen wir mit der Erstellung einer einfachen Dog-Klasse.
Öffnen Sie zuerst die Datei dog.py im Dateiexplorer auf der linken Seite der WebIDE. Diese Datei ist derzeit leer.
Fügen Sie nun den folgenden Code zu dog.py hinzu, um die Dog-Klasse zu definieren, eine Instanz zu erstellen und diese zu verwenden:
## Define a simple Dog class
class Dog:
## Class attribute
species = "Canis familiaris"
## Method
def bark(self):
print("Woof!")
## Create an instance (object) of the Dog class
my_dog = Dog()
## Access the class attribute using the instance
print(f"The species is: {my_dog.species}")
## Call the instance's method
print("The dog says:")
my_dog.bark()
Lassen Sie uns den Code aufschlüsseln:
class Dog:: Diese Zeile definiert eine neue Klasse namensDog.species = "Canis familiaris": Dies ist ein Klassenattribut (Class Attribute). Sein Wert wird von allen Instanzen derDog-Klasse gemeinsam genutzt.def bark(self):: Dies definiert eine Methode (Method), was eine Funktion innerhalb einer Klasse ist. Der Parameterselfist eine Referenz auf die aktuelle Instanz der Klasse und wird verwendet, um auf Variablen zuzugreifen, die zur Klasse gehören.my_dog = Dog(): Diese Zeile erstellt eine neue Instanz derDog-Klasse und weist sie der Variablenmy_dogzu.my_dog.species: Wir greifen über die Punktnotation auf das Attributspeciesdesmy_dog-Objekts zu.my_dog.bark(): Wir rufen die Methodebarkfür dasmy_dog-Objekt auf. Python übergibt dasmy_dog-Objekt automatisch alsself-Argument an die Methode.
Speichern Sie die Datei. Um Ihr Skript auszuführen, öffnen Sie ein Terminal in der WebIDE und führen Sie den folgenden Befehl aus:
python dog.py
Sie sollten die folgende Ausgabe sehen, die bestätigt, dass Ihr Objekt korrekt erstellt wurde und auf sein Attribut sowie seine Methode zugegriffen wurde.
The species is: Canis familiaris
The dog says:
Woof!
Objekte mit der __init__-Methode initialisieren
Während Klassenattribute von allen Instanzen gemeinsam genutzt werden, möchten Sie oft, dass jede Instanz ihre eigenen eindeutigen Daten besitzt. Die __init__-Methode ist eine spezielle Methode in Python-Klassen, die als Konstruktor fungiert. Sie wird automatisch aufgerufen, wenn Sie eine neue Instanz erstellen, und ermöglicht es Ihnen, deren eindeutige Attribute zu initialisieren.
Modifizieren wir die Dog-Klasse, um jedem Hund einen eindeutigen Namen und eine Rasse zu geben.
Öffnen Sie die Datei dog.py erneut und ersetzen Sie deren Inhalt durch den folgenden Code:
## Define a Dog class with an __init__ method
class Dog:
## Class attribute
species = "Canis familiaris"
## The __init__ method (constructor)
def __init__(self, name, breed):
## Instance attributes
self.name = name
self.breed = breed
## Method
def bark(self):
print("Woof!")
## Create instances with unique attributes
dog1 = Dog("Buddy", "Golden Retriever")
dog2 = Dog("Lucy", "Labrador")
## Access the instance attributes
print(f"{dog1.name} is a {dog1.breed}.")
print(f"{dog2.name} is a {dog2.breed}.")
## The class attribute is still shared
print(f"Both are of the species: {dog1.species}")
Hier ist, was sich geändert hat:
def __init__(self, name, breed):: Wir haben die__init__-Methode definiert. Sie nimmtself,nameundbreedals Argumente entgegen.self.name = nameundself.breed = breed: Diese Zeilen erstellen Instanzattribute (Instance Attributes). Diese sind für jedesDog-Objekt einzigartig. Das Schlüsselwortselfbindet diese Attribute an die spezifische Instanz, die gerade erstellt wird.dog1 = Dog("Buddy", "Golden Retriever"): Bei der Erstellung einer Instanz übergeben wir nun Argumente fürnameundbreed. Diese werden automatisch an die__init__-Methode weitergegeben.
Speichern Sie die Datei und führen Sie sie im Terminal aus:
python dog.py
Die Ausgabe zeigt, dass jedes Hundeobjekt seinen eigenen Namen und seine eigene Rasse hat, während es weiterhin das Klassenattribut species teilt.
Buddy is a Golden Retriever.
Lucy is a Labrador.
Both are of the species: Canis familiaris
Objektdarstellung mit __repr__ anpassen
Wenn Sie versuchen, ein Objekt direkt auszugeben, zeigt Python standardmäßig eine Darstellung an, die die Klasse des Objekts und seine Speicheradresse enthält, was nicht sehr hilfreich ist. Sie können eine aussagekräftigere und entwicklerfreundlichere String-Darstellung bereitstellen, indem Sie die spezielle Methode __repr__ definieren.
Fügen wir unserer Dog-Klasse eine __repr__-Methode hinzu.
Öffnen Sie dog.py und ersetzen Sie dessen Inhalt durch die endgültige Version unseres Codes:
## Define a Dog class with __init__ and __repr__ methods
class Dog:
## Class attribute
species = "Canis familiaris"
## The __init__ method (constructor)
def __init__(self, name, breed):
self.name = name
self.breed = breed
## The __repr__ method for a developer-friendly representation
def __repr__(self):
return f"Dog(name='{self.name}', breed='{self.breed}')"
## Method
def bark(self):
print("Woof!")
## Create an instance
my_dog = Dog("Buddy", "Golden Retriever")
## Print the object directly
print(my_dog)
Die wesentliche Ergänzung ist:
def __repr__(self):: Dies definiert die Repräsentationsmethode.return f"Dog(name='{self.name}', breed='{self.breed}')": Diese Methode sollte einen String zurückgeben. Eine gute Vorgehensweise ist es, den String so zu gestalten, dass er wie ein gültiger Python-Ausdruck aussieht, der verwendet werden könnte, um das Objekt mit demselben Zustand neu zu erstellen.
Speichern Sie die Datei und führen Sie das Skript ein letztes Mal aus:
python dog.py
Anstelle einer Speicheradresse ist die Ausgabe nun der klare, informative String, der von Ihrer __repr__-Methode zurückgegeben wird. Dies ist extrem nützlich für das Debugging.
Dog(name='Buddy', breed='Golden Retriever')
Zusammenfassung
In diesem Lab haben Sie die Grundlagen der objektorientierten Programmierung (Object-Oriented Programming, OOP) in Python gelernt. Sie begannen mit der Definition einer einfachen Klasse und der Erstellung einer Instanz davon, wobei Sie lernten, wie man Klassenattribute und Methoden verwendet. Anschließend erweiterten Sie Ihre Klasse durch das Hinzufügen der __init__-Methode, um jedes Objekt mit eindeutigen Instanzattributen zu initialisieren. Schließlich passten Sie die String-Darstellung Ihrer Objekte an, indem Sie die __repr__-Methode implementierten, was die Klarheit und Debugging-Fähigkeit Ihres Codes erheblich verbessert. Diese Konzepte bilden die Grundlage für die Erstellung komplexerer und strukturierterer Anwendungen in Python.



