Klassen und Objekte in Python definieren

PythonPythonBeginner
Jetzt üben

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.

Dies ist ein Guided Lab, das schrittweise Anweisungen bietet, um Ihnen beim Lernen und Üben zu helfen. Befolgen Sie die Anweisungen sorgfältig, um jeden Schritt abzuschließen und praktische Erfahrungen zu sammeln. Historische Daten zeigen, dass dies ein Labor der Stufe Anfänger mit einer Abschlussquote von 94% ist. Es hat eine positive Bewertungsrate von 100% von den Lernenden erhalten.

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 namens Dog.
  • species = "Canis familiaris": Dies ist ein Klassenattribut (Class Attribute). Sein Wert wird von allen Instanzen der Dog-Klasse gemeinsam genutzt.
  • def bark(self):: Dies definiert eine Methode (Method), was eine Funktion innerhalb einer Klasse ist. Der Parameter self ist 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 der Dog-Klasse und weist sie der Variablen my_dog zu.
  • my_dog.species: Wir greifen über die Punktnotation auf das Attribut species des my_dog-Objekts zu.
  • my_dog.bark(): Wir rufen die Methode bark für das my_dog-Objekt auf. Python übergibt das my_dog-Objekt automatisch als self-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 nimmt self, name und breed als Argumente entgegen.
  • self.name = name und self.breed = breed: Diese Zeilen erstellen Instanzattribute (Instance Attributes). Diese sind für jedes Dog-Objekt einzigartig. Das Schlüsselwort self bindet 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ür name und breed. 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

Objekt-Darstellung 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.

Morty Proxy This is a proxified and sanitized view of the page, visit original site.