Im vorherigen Abschnitt haben wir das Erstellen von Objekten durch Instanziierung aus einer Konstruktionszeichnung erwähnt, die als Klasse bezeichnet wird. Das Klassendiagramm des Objekts vom Typ Vogel war wie folgt.
Unter Berücksichtigung der Methode gibt es übrigens nur zwei Zustände: fly () und print_status (). Vögel singen tatsächlich, daher würde ich dieses Mal gerne diese Methode namens Schrei entwickeln.
Es gibt jedoch viele verschiedene Arten, Vögel zu singen, wie "Crow" für Crow, "Chun Chun" für Sparrow und Pegion. Es gibt verschiedene Arten wie "Kuruppo". In diesem Fall müssen Sie für jeden Vogeltyp wie folgt eine Klasse erstellen.
Wenn Sie sich jedoch das obige Klassendiagramm ansehen, unterscheiden sich alle nur im ** cry () - Methodenteil **, und die anderen Teile sind in allen Klassendiagrammen gleich.
Wenn ich mich darauf konzentriere, möchte ich darüber nachdenken, wie man nur den Unterschied programmiert.
Möglicherweise möchten Sie eine vorhandene Klasse nutzen und eine Klasse mit geringfügigen Änderungen erstellen. ** Vererbung ** kann zu diesem Zeitpunkt verwendet werden.
Mit der Vererbungsfunktion können Sie die Attribute und Methoden einer vorhandenen Klasse erben und eine Klasse erstellen, indem Sie die Attribute und Methoden nur für Unterschiede schreiben.
Es ist wie folgt, wenn es in einem Klassendiagramm ausgedrückt wird.
Es ist ersichtlich, dass die Crow-Klasse, die Pegion-Klasse und die Sparrow-Klasse von der Bird-Klasse erben. Wie Sie dieser Abbildung entnehmen können, müssen Sie nur die Crow-Klasse, die Pegion-Klasse und die Sparrow-Klasse ** cry () ** getrennt von der Bird-Klasse angeben. Auf diese Weise müssen Sie das Programm nicht einzeln neu schreiben, sondern nur die erforderlichen Unterschiede hinzufügen.
Im obigen Beispiel haben wir die Crow-Klasse, die Pegion-Klasse und die Sparrow-Klasse basierend auf der Bird-Klasse erstellt. Zu diesem Zeitpunkt heißt die ursprüngliche Klasse (diesmal Vogelklasse) ** Superklasse **, und die geerbten Klassen (diesmal Crow-, Pegion-, Sparrow-Klasse) heißen ** Unterklasse **.
Als nächstes konzentrieren wir uns auf die Beziehung zwischen Oberklassen und Unterklassen. Die Beziehung zwischen Vogel und Krähe kann als "Krähe ist Vogel" bezeichnet werden. In englischer Sprache notiert, ist es ** "Crow is a Bird" **. Solche Vererbungsbeziehungen werden manchmal als ** is_a-Beziehungen ** bezeichnet.
Aus der Sicht von Bird (Superklasse) ist es ** spezialisiert ** auf Crow (Unterklasse) und aus der Sicht von Crow (Unterklasse) ** verallgemeinert ** auf Bird (Superklasse) **. Es wird manchmal als sein ausgedrückt.
Lassen Sie uns das Programm tatsächlich schreiben. Zunächst wird das geerbte Programm im Allgemeinen wie folgt beschrieben.
Klasse Super Klassenname:
Super Klassenattribute
Verarbeitung nach Superklassenmethode
Name der Klassenunterklasse(Super Klassenname):
Unterklassenattribute
Verarbeitung nach Unterklassenmethoden
Das Schreiben von Crow, Pegion und Sparrow macht es jedoch schwierig zu sehen, daher werde ich dieses Mal nur eine Unterklasse von Crow schreiben. Schreiben Sie den folgenden Code in samp09_03_01.py </ font> in chap09 </ font>.
.samp09_03_01.py
#Beschreibung der Superklasse
class Bird:
def __init__(self, name, color):
print('-----Rufen Sie den Konstruktor auf, sobald Sie ihn instanziieren.-----')
self.name = name
self.color = color
#Die Flugmethode
def fly(self, m):
print('-----Rufen Sie die Fly-Methode auf.-----')
print(f'Mit Rascheln{self.name}Fliege in den Himmel.')
print(f'{m}Fliegen in einer Höhe von m.')
#Eine Methode, die den Status des instanziierten Vogels ausgibt
def print_status(self):
print('-----print_Rufen Sie die Statusmethode auf.-----')
print(f'{self.color}Es ist ein farbiger Vogel.')
#Beschreibung der Unterklasse
class Crow(Bird):
def cry(self):
print('-----Rufen Sie die cry-Methode in der Unterklasse auf.-----')
print('Es schreit.')
#Instanziieren Sie eine Crow der Unterklasse
kur = Crow('Kurosuke', 'schwarz')
#Rufen Sie die cry-Methode in der Unterklasse auf
kur.cry()
#Rufen Sie die Fly-Methode in der Oberklasse auf
kur.fly(10)
#Drucken Sie in Superklasse_Rufen Sie die Statusmethode auf
kur.print_status()
[Ausführungsergebnis] </ font> ----- Rufen Sie den Konstruktor auf, sobald Sie ihn instanziieren. ----- ----- Rufen Sie die cry-Methode in der Unterklasse auf. ----- Es schreit. ----- Rufen Sie die Fly-Methode auf. ----- Bassaba und Kurosuke fliegen in den Himmel. Fliegen in einer Höhe von 10m. ----- Rufen Sie die print_status-Methode auf. ----- Es ist ein schwarzer Vogel.
Zuerst instanziieren wir eine Krähe (Krähe) aus einer Unterklasse und weisen sie ** kur ** zu. Dann können Sie sehen, dass die Schreimethode in der Unterklasse ** Crow ** weint.
Und beachten Sie, dass Sie die Methoden auch in der Oberklasse ** Bird ** aufrufen können. Dies liegt daran, dass die ** Crow ** -Klasse von der ** Bird ** -Klasse erbt, sodass Sie auch die Methoden der ** Bird ** -Klasse aufrufen können.
Vererbung erscheint häufig in verschiedenen Bibliotheken, aber es ist ein Konzept, das auch in anderen Sprachen wie Java und C ++ erscheint. Die Begriffe, die häufig in der Vererbung vorkommen, sind Begriffe, die in der Prüfung zum Basic Information Engineer immer im objektorientierten Feld erscheinen. Halten wir sie also gedrückt.
Recommended Posts