[Hikari-Python] Kapitel 09-02 Klassen (Erstellen und Instanziieren von Klassen)

[Python] Kapitel 09-02 Erstellen und Instanziieren von Klassen

Im vorherigen Abschnitt haben wir erklärt, was ein Objekt ist, und erklärt, dass Zahlen, Listen usw. alle Objekte sind. Zum Beispiel numerische Objekte und Listenobjekte.

Dieses Mal möchte ich darauf eingehen, wie Sie selbst ein Objekt erstellen.

Was ist eine Objektentwurfszeichnung?

Ich habe erklärt, dass es in Python numerische, Listen- und Zeichenfolgentypen von Objekten gibt. Beispielsweise gibt es im Fall eines Objekts vom Typ Zeichenkette Aktionen (Methoden) wie "Nur den Anfang der Daten großschreiben" und "Das angegebene Zeichen in den Daten finden".

Dies ist ein String-Typ-Objekt, aber tatsächlich gibt es in Python eine ** Entwurfszeichnung ** dieses String-Typ-Objekts. (Mir ist das normalerweise nicht bewusst) Diese Konstruktionszeichnung heißt ** Klasse **.

Bisher habe ich unwissentlich Zahlen, Zeichenketten, Listen usw. verwendet, aber jedes Mal, wenn ich sie verwende, erstelle ich Objekte basierend auf ** Konstruktionszeichnungen (Klassen). ** **.

In dieser Konstruktionszeichnung wird beispielsweise geschrieben, was mit Daten zu tun ist (auch Attribute oder Eigenschaften genannt), wie mit Methoden umzugehen ist usw.

Das folgende Objektdesigndiagramm wird als Klassendiagramm (*) </ font> bezeichnet und wird häufig beim Entwerfen der Programmierung verwendet.

Das folgende Beispiel des Klassendiagramms ist beispielsweise ein Entwurfsdiagramm, das eine Person darstellt.

image.png

Das Klassendiagramm (*) </ font> ist eines der grundlegenden Diagramme von UML (Unified Modeling Language) und drückt häufig die Beziehungen zwischen den Klassen aus, aus denen das System besteht. Gibt die Attribute und Methoden an, die die Klasse enthält.

Eine Klasse erstellen

Jetzt möchte ich endlich eine Klasse und ein Originalobjekt erstellen. Schreiben Sie zunächst im Allgemeinen wie folgt.

Klasse Klassenname:
Konstruktoren und Methoden, die Klassen definieren

Es gibt einige Begriffe, von denen ich noch nichts gehört habe, aber ich werde sie später erklären, aber unter: (Doppelpunkt) beschreibe ich den Inhalt des obigen Klassendiagramms.

Es ist jedoch schwierig, plötzlich allgemeine Dinge zu tun. Deshalb werden wir hier anhand eines Beispiels einer Klassendefinition erklären, die einen Vogel darstellt. Erstellen wir ein Objektprogramm vom Typ Vogel unter der Annahme, dass es die folgenden Daten (Attribute) und Methoden enthält. 【Attribut】 · Name · Farbe

** [Methode] ** ・ Flugmethode -Methode zum Drucken des Vogelstatus (print_status)

Lassen Sie uns dies zunächst in einem Klassendiagramm zeigen. image.png

Lassen Sie es uns zunächst aus einer Bird-Typklasse erstellen. Schreiben Sie den folgenden Code in samp09_02_01.py </ font>. * </ font> Ab diesem Zeitpunkt werden wir es mit _ (Unterstrich) von ** samp09_02_01.py ** anstelle von samp09-02-01.py benennen.

.samp09_02_01.py


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 flying(self, m):
        print('-----Nennen Sie die Flugmethode.-----')
        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.')

Lassen Sie uns nun dieses Programm "Flugmethode (Fliegen)" und "Statusdruckmethode (print_status)" zusammen mit dem Klassendiagramm ausführen. Sie können jedoch sehen, dass nichts angezeigt wird.

Um dies zu lösen, benötigen Sie ** Instanziierung **.

Instanziierung

Im Moment wurde das Ausführungsergebnis im obigen Programm nicht angezeigt, aber im obigen Programm habe ich gerade eine Konstruktionszeichnung der Bird-Klasse erstellt, dh ** Vogeltyp **. Zu diesem Zeitpunkt haben wir nur den Typ "Vogel ist so" definiert, und es gibt keine konkrete Vogeleinheit. (Als Beispiel wird die Art des Thai-Yaki definiert, aber das Thai-Yaki selbst wird nicht durchgeführt.)

Es ist notwendig, aus dieser Konstruktionszeichnung zu materialisieren, und dies wird als ** Instanziierung ** bezeichnet. Weitere materialisierte werden als ** Instanzen ** bezeichnet.

Sie müssen den folgenden Code hinzufügen, um ihn zu instanziieren. Fügen Sie samp09_02_01.py </ font> den folgenden Code hinzu.

.samp09_02_01.py


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 flying(self, m):
        print('-----Nennen Sie die Flugmethode.-----')
        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.')


#Geben Sie den Namen und die Farbe des Vogels beim Instanziieren an und weisen Sie ihn einer Variablen namens Chi zu
chi = Bird('Chitti', 'Tee')

Auf diese Weise können Sie eine Instanz von Bird erstellen, die in der folgenden Abbildung dargestellt ist. image.png

Vogel mit einer Variablen namens ** chi ** (zuvor als Tag beschrieben).

Konstrukteur

Wie in den Kommentaren im Programm erwähnt, heißt der Ort ** def \ _ \ _ init \ __ (Selbst, Name, Farbe): ** ** Konstruktor **.

Ohne diesen Konstruktor werden die Daten (Attribute) ** name ** (diesmal "chitch") und ** color ** (diesmal "brown") bei der Instanziierung nicht wiedergegeben.

Um die Daten (Attribute) gleichzeitig durch Instanziieren wiederzugeben, wird der Wert daher im Konstruktor in ** Name ** bzw. ** Farbe ** wiedergegeben.

Ich bin neugierig auf dieses ** Selbst **, aber tatsächlich zeigt es die ** Instanz selbst ** an und kann das ** erste Argument ** sein. (Es muss nicht Selbst genannt werden, aber es ist oft üblich, es Selbst zu nennen.) Im Konstruktor bedeutet "self.name = name", dass ** "Name der Instanz selbst" ** durch ** "name ersetzt wird (enthält tatsächlich den Wert" chitchi ")" **. Ich mache es.

Auf diese Weise ist es möglich, dem instanziierten Vogel (Vogel) die folgenden Attribute zu geben. * </ font> Vergewissern Sie sich, dass die Farbe "braun" und der Name "chitch" ist.

image.png

Bedienen Sie, was instanziiert wird

Bisher haben wir ein Objekt erstellt, indem wir eine Bird-Typklasse erstellt und instanziiert haben. Wie ich im vorherigen Abschnitt erwähnt habe, habe ich erklärt, dass ** Objekte Daten (Attribute) und Methoden ** haben. Wie wäre es mit dieser Zeit? Objekte vom Typ Vogel haben die Attribute ** Name ** und ** Farbe ** sowie Methoden ** Flying () ** und ** Print_status () **.

Lassen Sie uns sie tatsächlich bedienen. Bitte ergänzen Sie das vorherige Programm. (Zugabe ist gegen Ende)

.samp09_02_01.py


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 flying(self, m):
        print('-----Nennen Sie die Flugmethode.-----')
        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.')


#Geben Sie den Namen und die Farbe des Vogels beim Instanziieren an und weisen Sie ihn einer Variablen namens Chi zu
chi = Bird('Chitti', 'Tee')

#Nennen Sie die Flugmethode eines Objekts vom Typ Vogel
chi.flying(15)

#Objektdruck vom Typ Vogel_Rufen Sie die Statusmethode auf
chi.print_status()

[Ausführungsergebnis] </ font> ----- Rufen Sie den Konstruktor auf, sobald Sie ihn instanziieren. ----- ----- Rufen Sie die Flugmethode auf. ----- Bass Bass und Chitchi fliegen in den Himmel. Fliegen in einer Höhe von 15m. ----- Rufen Sie die print_status-Methode auf. ----- Es ist ein brauner Vogel.

Gehen Sie zunächst die Verarbeitung der Klasse (Vogel) durch.

chi = Bird('Chitti', 'Tee')

Wird instanziiert von. Dadurch wird ein Objekt vom Typ Vogel mit dem Wert Chi erstellt. Zur gleichen Zeit vom Konstruktor ** "----- Rufen Sie den Konstruktor auf, sobald er instanziiert ist. -----" ** Wird ausgegeben, und dann werden die Werte von ** Name ** und ** Farbe ** zugewiesen.

Nächster,

chi.flying(15)
chi.print_status()

Ruft das Verhalten eines Objekts vom Typ Vogel namens Chi auf.

Es ist jedoch schwierig, dies zu tun. Denken wir also wie folgt darüber nach. Vergleichen wir das Objekt vom Listentyp mit dem diesmal erstellten Objekt vom Typ Vogel.

Listentyp Objekt Vogelart Objekt
Instanzerstellung ls = [10, 15, 20] chi = Bird('Chitti', 'Tee')
Attribute (Daten) zu diesem Zeitpunkt 10, 15, 20 'Chitti', 'Tee'
Im Objekt
Ausführung einer Methode 1
ls.count(10)
(Eine Methode, um herauszufinden, wie viele Zahlen 10 sind)
chi.flying(15)
(Eine Methode, die einen Flugbefehl und auch die Höhe ausgibt.)
Im Objekt
Ausführung einer Methode 2
ls.clear()
(Methode zum Löschen von Elementen in der Liste)
chi.print_status()
(Methode zur Ausgabe des Status)

Untersuchen Sie den Typ

Im obigen Beispiel haben wir erklärt, dass ** chi ** ein Objekt vom Typ ** Bird ** ist, aber Sie können auch herausfinden, ob es wirklich so ist. Geben Sie dieses Mal den folgenden Code von ** Python Console ** ein.

>>> from chap09.samp09_02_01 import Bird
>>> chi = Bird('Chitti', 'Tee')
-----Rufen Sie den Konstruktor auf, sobald Sie ihn instanziieren.-----
>>> type(chi)
<class 'chap09.samp09_02_01.Bird'>

In der Tat stellte sich heraus, dass es sich um ein Objekt vom Typ Vogel handelte. (Es kann sich je nach gespeichertem Ordner oder Programmnamen ändern, ist aber immer noch ein Bird-Objekt.)

Schließlich

Ich erklärte, wie man aus einer Konstruktionszeichnung namens Klasse instanziiert. Obwohl ich diesmal nicht erklärt habe, ist es möglich, mehrere Instanzen (≒ Objekte) aus einer Konstruktionszeichnung zu erstellen.

Dieses Mal habe ich die instanziierte der Variablen ** chi ** zugewiesen, aber lassen Sie uns die Variable tatsächlich ändern und mehrere Vögel mit unterschiedlichen Namen und Farben erstellen.

Für Objekte kann es schwierig sein, aber wir verwenden immer noch die Methoden und Funktionen, die wir bisher verwendet haben. Es ist leichter zu verstehen, wenn Sie es mit der obigen Tabelle vergleichen.

Zurück zum [Inhaltsverzeichnis Link]

Recommended Posts