Inhaltsverzeichnis[Ausblenden][Zeigen]
In dieser Vorlesung lernen wir Klassen, Konstruktoren und Vererbung in Python kennen.
Diese Konzepte sind wirklich wichtig in einem großen Programm, in dem verschiedene Typen definiert werden müssen.
Klassen
Klassen sind beim Programmieren unerlässlich und nicht spezifisch für Python. Viele andere Programmiersprachen unterstützen den Klassenbegriff. Wir verwenden Klassen, um neue Datentypen zu definieren.
Bisher haben wir die grundlegenden Datentypen in Python wie Zahlen, Zeichenfolgen und boolesche Werte kennengelernt. Dies sind die grundlegenden oder einfachen Datentypen in Python. Wir haben auch einige komplexe Datentypen wie Listen und Wörterbücher gesehen.
Obwohl diese Typen äußerst nützlich sind, können sie nicht immer zum Modellieren komplexer Konzepte verwendet werden. Denken Sie zum Beispiel an die Idee eines Punktes oder eines Einkaufswagens. Ein Warenkorb ist kein boolescher Wert oder eine Liste. Es ist eine andere Art von Daten. Wir können also Klassen verwenden, um neue Typen zu definieren, um reale Konzepte zu modellieren.
Lassen Sie uns nun einen neuen Datentyp namens Punkt definieren. Dieser neue Typ wird Methoden haben, wie wir zuvor überprüft haben.
So werden Sie es tun:
Wir beginnen damit, eine Klasse zu definieren, indem wir das Schlüsselwort „class“ verwenden, und gleich danach geben wir unserer Klasse einen Namen.
class Point
Schauen Sie sich nun die Namenskonvention an, die ich hier verwendet habe. Ich habe hier den ersten Buchstaben groß geschrieben, das nennen wir eine Pascal-Namenskonvention. Diese Konvention unterscheidet sich von der, die wir für die Benennung unserer Variablen und Funktionen verwenden, für die wir immer Kleinbuchstaben verwenden und mehrere Wörter mit einem Unterstrich trennen. Aber wenn wir Klassen benennen, verwenden wir keinen Unterstrich, um mehrere Wörter zu trennen, sondern schreiben den ersten Buchstaben jedes Wortes groß.
Nach der Definition unserer Klasse wird ein Doppelpunkt verwendet, was bedeutet, dass jetzt ein Block definiert ist.
class Point:
def move (self):
In diesem Block können wir alle Funktionen oder Methoden definieren, die zu Punkten gehören. Zum Beispiel können wir eine Funktion namens „move“ definieren, um einen Punkt zu verschieben. Beachten Sie, dass PyCharm hier automatisch „self“ hinzufügt, sobald wir öffnende Klammern eingeben. Dies ist ein spezielles Schlüsselwort, und lassen Sie mich kurz darauf zurückkommen. Lassen Sie uns „move“ auf dem Terminal ausgeben.
print("move")
Lassen Sie uns eine andere Methode wie „draw“ definieren und auf dem Terminal ausgeben.
def draw(self):
print("draw")
Wir sind mit der Definition unserer „Punkt“-Klasse fertig. Mit diesem neuen Typ können wir neue Objekte erstellen. Eine Klasse definiert einfach den Entwurf oder die Vorlage zum Erstellen von Objekten, die die tatsächlichen Instanzen auf der Grundlage dieses Entwurfs sind. Um ein Objekt zu erstellen, geben wir den Namen unserer Klasse ein und rufen sie dann wie eine Funktion auf. Dies erstellt ein neues Objekt und gibt es dann zurück. Dann können wir dieses Objekt in einer Variablen speichern. Lassen Sie mich Ihnen zeigen:
Hier haben wir einen „Punkt1“ definiert, der ein dreidimensionaler Punkt ist. Sie sehen das, wir können einzelne Koordinaten auf dem Terminal ausdrucken.
Wir können mit diesem Punkt die beiden Methoden „Zeichnen“ und „Bewegen“ anwenden.
Um es noch einmal zusammenzufassen: Wir verwenden Klassen, um neue Typen zu definieren, und diese Typen können Methoden haben, die wir im Hauptteil der Klasse definieren. Klassen können Attribute haben, die wir überall in unseren Programmen setzen können.
Konstruktoren
Bisher haben wir gelernt, wie man neue Typen mit Hilfe von Klassen erstellt. Nun gibt es bei dieser Implementierung ein kleines Problem. Wir können ein Punktobjekt ohne x- oder y-Koordinate mithilfe von Klassen erstellen, und das ist nicht ideal. Lass es mich dir zeigen.
Lassen Sie uns einen Punkt erstellen und drucken, bevor wir die x-Koordinate festlegen. Das Ausführen unseres Programms führt zu einem Attributfehler wie diesem:
Das bedeutet, dass das Punktobjekt kein Attribut namens x hat. Nun besteht das Problem darin, dass es möglich ist, ein Punktobjekt ohne x- oder y-Koordinaten zu haben. Das macht keinen Sinn, denn wann immer wir über einen Punkt sprechen, müssen wir wissen, wo sich dieser Punkt befindet. Um dieses Problem zu lösen, verwenden wir einen Konstruktor. Ein Konstruktor ist eine Funktion, die beim Erstellen eines Objekts aufgerufen wird.
So verwenden wir einen Konstruktor. Lassen Sie uns zunächst die x- und y-Koordinatenwerte im obigen Programm übergeben.
point = Point(10, 20)
print(point.x)
Jetzt müssen wir dieser Klasse eine spezielle Methode namens Konstruktor hinzufügen. Seine Syntax ist wie folgt:
def __init__(self, x, y):
init
ist die Abkürzung für initialisiert, und dies ist die Funktion oder Methode, die aufgerufen wird, wenn ein neues Punktobjekt erstellt wird. Die x und y werden direkt danach hinzugefügt self
um zwei zusätzliche Parameter hinzuzufügen.
Danach sollten wir x und y den übergebenen Werten zuordnen, dh 10 und 20
self.x = x
self.y = y
Wir nutzen die self
um auf das aktuelle Objekt zu verweisen, und dann setzen wir das x-Attribut auf das x-Argument, das an die Funktion „x“ übergeben wird. Auf diese Weise verwenden init
-Methode können wir unsere Objekte initialisieren. Diese Methode wird als Konstruktor bezeichnet. Lassen Sie uns unser Programm ausführen.
Jetzt können wir die x- und y-Koordinaten später ändern. Aktualisieren wir die x-Koordinate:
point = Point(10, 20)
point.x = 11
print(point.x)
Jetzt wird die x-Koordinate auf den Wert 11 aktualisiert.
Training
Hier ist eine interessante Übung für Sie.
Ich möchte, dass Sie einen neuen Typ namens Person definieren. Diese „Person“-Objekte sollten einen „name
”-Attribut sowie ein “talk()
" Methode.
Es ist eine einfache Aufgabe und sollte nicht länger als ein paar Minuten dauern.
Lösung
Beginnen Sie mit der Definition der Klasse „Person“ wie folgt:
class Person:
self.name = name
Wir werden den Konstruktor später definieren. Jetzt können wir das Objekt „Person“ erstellen. Nennen wir es Johannes
john = Person("John Smith")
print(john.name)
john.talk()
Fahren Sie nun mit dem ersten Teil des Codes fort und erstellen Sie einen Konstruktor.
def __init__(self, name):
Der endgültige Code sieht folgendermaßen aus:
Sie können auch formatierte Zeichenfolgen und andere Konzepte in Verbindung mit Klassen und Konstruktoren verwenden.
Erbe
Vererbung ist ein weiteres Konzept im Zusammenhang mit Klassen, mit denen Sie einen Code wiederverwenden können.
Betrachten Sie dieses Stück Code.
class Dog:
def walk(self):
print("walk")
Wir haben eine Klasse „Dog“ mit einer „walk“-Methode erstellt. Bei dieser Methode drucken wir einfach die Walk-Nachricht auf dem Terminal aus. Nehmen wir an, in einem echten Programm gibt es hier 10 Codezeilen statt nur einer Zeile. Wenn in Zukunft eine andere Klasse benötigt wird, um die „Walk“-Methode zu haben, müssen wir diesen ganzen Code wiederholen. Dies ist nicht optimal.
Beim Programmieren haben wir ein Prinzip namens DRY, das für don't repeat yourself steht. Nehmen wir an, wir entdecken irgendwann in der Zukunft ein Problem mit unserer „Geh“-Methode, und wenn wir diese Methode an vielen anderen Stellen wiederholt oder dupliziert haben, müssen wir zurückkommen und dieses Problem an jeder einzelnen Stelle beheben, an der wir dies dupliziert haben Code. Deshalb sollten wir beim Programmieren etwas nicht zweimal definieren.
Es gibt verschiedene Herangehensweisen, um dieses Problem zu beheben, aber hier lernen wir diejenige kennen, die für Anfänger einfacher ist und Vererbung genannt wird. In diesem Fall erstellen wir eine weitere Klasse „Säugetier“ und definieren unser „walk“-Attribut in dieser Klasse.
class Mammal:
def walk(self):
print("walk")
Nachdem wir unsere Klasse „Säugetier“ definiert haben, können wir Vererbung verwenden, um die Attribute wie folgt zu übergeben:
Sowohl die Hunde- als auch die Katzenklasse erben alle Klassenmethoden, die in ihrer Elternklasse definiert sind. Jetzt können wir hundespezifische Methoden wie diese hinzufügen:
class Dog:
def bark(self):
print("bark")
Einpacken!
Hier drehte sich alles um die Klassen, Konstruktoren und die Wiederverwendung des Codes in Klassen mit Vererbungskonzepten. Jetzt nähern wir uns dem Ende unserer Serie. An diesem Punkt sollten Sie in der Lage sein, guten, lesbaren und prägnanten Code in Python zu erstellen.
Das Konzept von Modulen und Paketen werden wir in der nächsten Vorlesung sehen.
Hinterlassen Sie uns einen Kommentar