Wie man Klassen erstellt und Objekte in Python 3 definiert
Einführung
Python ist eine objektorientierte Programmiersprache. Objektorientierte Programmierung (OOP) konzentriert sich darauf, wiederverwendbare Code-Muster zu erstellen, im Gegensatz zur prozeduralen Programmierung, die sich auf explizite sequenzierte Anweisungen konzentriert. Besonders bei der Arbeit an komplexen Programmen ermöglicht die objektorientierte Programmierung, Code wiederzuverwenden und lesbareren Code zu schreiben, was wiederum die Wartbarkeit verbessert.
Eines der wichtigsten Konzepte in der objektorientierten Programmierung ist die Unterscheidung zwischen Klassen und Objekten, die wie folgt definiert sind:
- Klasse — Ein von einem Programmierer erstellter Entwurf für ein Objekt. Dies definiert eine Menge von Attributen, die jedes Objekt charakterisieren, das aus dieser Klasse instanziiert wird.
- Objekt — Eine Instanz einer Klasse. Dies ist die realisierte Version der Klasse, in der die Klasse im Programm manifestiert ist.
Diese werden verwendet, um Muster zu erstellen (im Falle von Klassen) und dann die Muster zu nutzen (im Falle von Objekten).
In diesem Tutorial werden wir durch die Erstellung von Klassen, das Instanziieren von Objekten, das Initialisieren von Attributen mit der Konstruktor-Methode und das Arbeiten mit mehr als einem Objekt derselben Klasse gehen.
Voraussetzungen
Sie sollten Python 3 installiert und eine Programmierumgebung auf Ihrem Computer oder Server eingerichtet haben. Wenn Sie keine Programmierumgebung eingerichtet haben, können Sie auf die Installations- und Einrichtungsanleitungen für eine lokale Programmierumgebung oder für eine Programmierumgebung auf Ihrem Server verweisen, die für Ihr Betriebssystem (Ubuntu, CentOS, Debian usw.) geeignet ist.
Klassen
Klassen sind wie ein Bauplan oder ein Prototyp, den Sie definieren können, um Objekte zu erstellen.
Wir definieren Klassen mit dem Schlüsselwort class, ähnlich wie wir Funktionen mit dem Schlüsselwort def definieren.
Info: Um dem Beispielcode in diesem Tutorial zu folgen, öffnen Sie eine Python-interaktive Shell auf Ihrem lokalen System, indem Sie den Befehl python3 ausführen. Dann können Sie die Beispiele kopieren, einfügen oder bearbeiten, indem Sie sie nach der >>> Eingabeaufforderung hinzufügen.
Lass uns eine Klasse namens Shark definieren, die zwei Funktionen hat, eine zum Schwimmen und eine zum Großartigsein:
class Shark:
def swim(self):
print("The shark is swimming.")
def be_awesome(self):
print("The shark is being awesome.")
Da diese Funktionen unter der Klasse Shark eingerückt sind, werden sie Methoden genannt. Methoden sind eine spezielle Art von Funktionen, die innerhalb einer Klasse definiert sind.
Das Argument für diese Funktionen ist das Wort self, das einen Verweis auf Objekte darstellt, die auf dieser Klasse basieren. Um Instanzen (oder Objekte) der Klasse zu referenzieren, wird self immer der erste Parameter sein, es muss jedoch nicht der einzige sein.
Die Definition dieser Klasse hat keine Shark-Objekte erstellt, sondern nur das Muster für ein Shark-Objekt, das wir später definieren können. Das heißt, wenn Sie das obige Programm zu diesem Zeitpunkt ausführen, wird nichts zurückgegeben.
Die Erstellung der oben genannten Shark-Klasse gab uns einen Plan für ein Objekt.
Objekte
Ein Objekt ist eine Instanz einer Klasse. Wir können die oben definierte Shark-Klasse nehmen und verwenden, um ein Objekt oder eine Instanz davon zu erstellen.
Wir werden ein Shark-Objekt namens sammy erstellen:
sammy = Shark()
Hier haben wir das Objekt sammy als Instanz der Klasse initialisiert, indem wir es gleich Shark() gesetzt haben.
Jetzt verwenden wir die beiden Methoden mit dem Shark-Objekt sammy:
sammy = Shark()
sammy.swim()
sammy.be_awesome()
Das Shark-Objekt sammy verwendet die beiden Methoden swim() und be_awesome(). Wir haben diese mit dem Punktoperator (.) aufgerufen, der verwendet wird, um auf ein Attribut des Objekts zuzugreifen. In diesem Fall ist das Attribut eine Methode und wird mit Klammern aufgerufen, ähnlich wie man auch eine Funktion aufruft.
Da der Schlüsselbegriff self ein Parameter der Methoden war, wie im Shark-Klasse definiert, wird das sammy-Objekt an die Methoden übergeben. Der self-Parameter stellt sicher, dass die Methoden eine Möglichkeit haben, auf die Attribute des Objekts zuzugreifen.
Wenn wir die Methoden aufrufen, wird jedoch nichts innerhalb der Klammern übergeben, das Objekt sammy wird automatisch mit dem Punktoperator übergeben.
Lass uns das Objekt im Kontext eines Programms hinzufügen:
class Shark:
def swim(self):
print("The shark is swimming.")
def be_awesome(self):
print("The shark is being awesome.")
def main():
sammy = Shark()
sammy.swim()
sammy.be_awesome()
if __name__ == "__main__":
main()
Lass uns das Programm ausführen, um zu sehen, was es macht:
- python shark.py
The shark is swimming.
The shark is being awesome.
Das Objekt sammy ruft die beiden Methoden in der main() Funktion des Programms auf, wodurch diese Methoden ausgeführt werden.
Die Konstruktor-Methode
Die Konstruktor-Methode wird verwendet, um Daten zu initialisieren. Sie wird ausgeführt, sobald ein Objekt einer Klasse instanziiert wird. Auch bekannt als die __init__ Methode, wird sie die erste Definition einer Klasse sein und sieht folgendermaßen aus:
class Shark:
def __init__(self):
print("This is the constructor method.")
Wenn Sie die oben genannte __init__-Methode zur Shark-Klasse im obigen Programm hinzufügen, würde das Programm Folgendes ausgeben, ohne dass Sie etwas an der sammy-Instanzierung ändern:
This is the constructor method.
The shark is swimming.
The shark is being awesome.
Dies liegt daran, dass die Konstruktor-Methode automatisch initialisiert wird. Sie sollten diese Methode verwenden, um alle Initialisierungen durchzuführen, die Sie mit Ihren Klassenobjekten vornehmen möchten.
Anstatt die obenstehende Konstruktor-Methode zu verwenden, lass uns eine erstellen, die eine name-Variable verwendet, die wir nutzen können, um Objekten Namen zuzuweisen. Wir übergeben name als Parameter und setzen self.name gleich name:
class Shark:
def __init__(self, name):
self.name = name
Als Nächstes können wir die Zeichenfolgen in unseren Funktionen so ändern, dass sie auf die Namen verweisen, wie folgt:
class Shark:
def __init__(self, name):
self.name = name
def swim(self):
# Reference the name
print(self.name + " is swimming.")
def be_awesome(self):
# Reference the name
print(self.name + " is being awesome.")
Schließlich können wir den Namen des Shark-Objekts sammy gleich "Sammy" setzen, indem wir es als Parameter der Shark-Klasse übergeben:
class Shark:
def __init__(self, name):
self.name = name
def swim(self):
print(self.name + " is swimming.")
def be_awesome(self):
print(self.name + " is being awesome.")
def main():
# Set name of Shark object
sammy = Shark("Sammy")
sammy.swim()
sammy.be_awesome()
if __name__ == "__main__":
main()
Wir können das Programm jetzt ausführen:
- python shark.py
Sammy is swimming.
Sammy is being awesome.
Wir sehen, dass der Name, den wir dem Objekt übergeben haben, ausgegeben wird. Wir haben die __init__-Methode mit dem Parameter name (neben dem self-Schlüsselwort) definiert und eine Variable innerhalb der Methode definiert.
Da die Konstruktormethode automatisch initialisiert wird, müssen wir sie nicht explizit aufrufen, sondern lediglich die Argumente in den Klammern hinter dem Klassennamen übergeben, wenn wir eine neue Instanz der Klasse erstellen.
Wenn wir einen weiteren Parameter hinzufügen wollten, wie zum Beispiel age, könnten wir dies tun, indem wir ihn ebenfalls an die __init__-Methode übergeben:
class Shark:
def __init__(self, name, age):
self.name = name
self.age = age
Dann, wenn wir unser Objekt sammy erstellen, können wir Sammys Alter in unserer Aussage übergeben:
sammy = Shark("Sammy", 5)
Um age zu verwenden, müssten wir auch eine Methode in der Klasse erstellen, die darauf zugreift.
Konstruktormethoden ermöglichen es uns, bestimmte Attribute eines Objekts zu initialisieren.
Arbeiten mit mehr als einem Objekt
Klassen sind nützlich, weil sie uns ermöglichen, viele ähnliche Objekte basierend auf dem gleichen Plan zu erstellen.
Um ein Gefühl dafür zu bekommen, wie das funktioniert, lassen Sie uns ein weiteres Shark-Objekt zu unserem Programm hinzufügen:
class Shark:
def __init__(self, name):
self.name = name
def swim(self):
print(self.name + " is swimming.")
def be_awesome(self):
print(self.name + " is being awesome.")
def main():
sammy = Shark("Sammy")
sammy.be_awesome()
stevie = Shark("Stevie")
stevie.swim()
if __name__ == "__main__":
main()
Wir haben ein zweites Shark-Objekt mit dem Namen stevie erstellt und den Namen "Stevie" an es übergeben. In diesem Beispiel haben wir die Methode be_awesome() mit sammy und die Methode swim() mit stevie verwendet.
Lass uns das Programm ausführen:
- python shark.py
Sammy is being awesome.
Stevie is swimming.
Die Ausgabe zeigt, dass wir zwei verschiedene Objekte verwenden, das sammy Objekt und das stevie Objekt, beide aus der Klasse Shark.
Klassen ermöglichen es, mehr als ein Objekt zu erstellen, das dem gleichen Muster folgt, ohne jedes von Grund auf neu zu erstellen.
Schlussfolgerung
Dieses Tutorial behandelte das Erstellen von Klassen, das Instanziieren von Objekten, das Initialisieren von Attributen mit der Konstruktor-Methode und die Arbeit mit mehr als einem Objekt derselben Klasse.
Objektorientierte Programmierung ist ein wichtiges Konzept, das man verstehen sollte, da es die Wiederverwendung von Code ermöglicht, da Objekte, die für ein Programm erstellt wurden, in einem anderen verwendet werden können. Objektorientierte Programme führen auch zu einem besseren Programmdesign, da komplexe Programme schwierig zu schreiben sind und sorgfältige Planung erfordern, und dies wiederum die Wartung des Programms im Laufe der Zeit erleichtert.