Ich möchte die Frage nach der Methode "__init__" und dem Argument "self" der Python-Klasse klären.

Zusammenfassung dieses Artikels

Dieser Artikel sollte für diejenigen, die "def \ _ \ _ init \ _ \ _ (self):" schreiben, das in der Python-Klassendefinition so erscheint, als ob sie vorerst gespeichert wären, so intuitiv wie möglich sein. Ich habe geschrieben, um es zu tun.

Python-Klassendefinition

Python verwendet beim Definieren einer Klasse das folgende Format.

class demo_class():
    def __init__(self):
        pass

Da dies nicht intuitiv ist (für Python), denke ich, dass es viele Anfänger außer mir gibt, die es schwer haben.

Erklärungen wie Nachschlagewerke (Einführung in Python 3)

\ _ \ _ Init \ _ \ _ () ist ein spezieller Name für die Methode, die ein einzelnes Objekt initialisiert, wenn es aus der Klassendefinition erstellt wird.

Ich bin mir nicht sicher, ob Sie so viel sagen. In dieser Einführung zu Python 3 wurde jedoch weiterhin erklärt, was das Python-Verarbeitungssystem tut, und es war leicht zu verstehen. Daher werde ich es zusammenfassen und mit zusätzlichen Abbildungen erläutern.

Fügen Sie zur Vereinfachung der Erklärung den Namen der Mitgliedsvariablen der Klasse hinzu und fügen Sie das Element hinzu, um "hoge" hinzuzufügen.


class demo_class():
    def __init__(self,name):
        self.name = name

a = demo_class("hoge")
print("a: ",a)
print("a.name: ",a.name)


[Ausgabeergebnis]

a:  <__main__.demo_class object at 0x1023b6668>
a.name:  hoge

Bild davon, wie sich Python-Klassen verhalten

Python kann Klassen wie das Ausführen einer Funktion instanziieren. Eine Instanz ist eine Entität eines Objekts, und Instanziierung bedeutet ungefähr, ein Programm im Speicher ausführbar zu machen.

Woher kommt der Python-Interpreter in der folgenden Zeile?

a = demo_class("hoge")
  1. Siehe Definition der Klasse demo_class
  2. Erstellen Sie ein leeres Objekt der Klasse demo_class
  3. Initialisieren Sie das Klassenobjekt demo_class basierend auf dem Argument
  4. Weisen Sie dem Namen der Mitgliedsvariablen die Zeichenfolge "hoge" zu
  5. Benennen Sie das Objekt a

Es wird in der oben angegebenen Reihenfolge verarbeitet. Es sieht aus wie in der Abbildung unten obj.dot.png

obj.dot.png

obj.dot.png

Erklärung der Figur

Erstellen Sie zunächst ein leeres Klassenobjekt aus der Klassendefinition

obj.dot.png

Das generierte Klassenobjekt muss das vorherige Objekt ändern, um sich selbst zu initialisieren (fügen Sie dem Namenselement "hoge" hinzu). Derzeit weiß ich vom Python-Interpreter nicht, welche Art von Initialisierung für welches Objekt durchgeführt werden soll, und ich weiß nicht, wie ich auf die Variable verweisen soll.

Die Methode \ _ \ _ init \ _ \ _ ist eine spezielle Methode zur Initialisierung.

Das heißt, ** um zu verdeutlichen, welches Objekt der Python-Interpreter initialisieren soll und wie ** mit der speziellen Methode \ _ \ _ init \ _ \ _ Methode zur Initialisierung ** das leere Objekt, das Sie gerade erstellt haben Wird als Selbstargument übergeben **.

obj.dot.png

Auf diese Weise können Sie Ihre eigenen Objekte identifizieren und müssen keine zusätzlichen Namen für jede Klasse erstellen.

Das Problem hier ist "self.name".


def __init__(self,name):
    self.name = name

Der "self.name" auf der linken Seite ** definiert eine Mitgliedsvariable **, also ** erstellen Sie eine Namensvariable im Objekt und weisen Sie den Namen zu, der das Argument "hoge" enthält ** Das ist. Mit anderen Worten, ** der Name in der ersten Zeile und der Name auf der rechten Seite der zweiten Zeile stehen für verschiedene Dinge **. Da dies das gleiche ist, denke ich, ist es auf den ersten Blick schwer zu verstehen.

Der Grund für die Annahme von "Selbst" ist, dass dadurch explizit angegeben wird, auf welches Objekt sich der Interpreter für die Verarbeitung beziehen soll. (vielleicht)

(In Python wird alles, was auf ein "." Folgt, als Attribut bezeichnet.)

obj.dot.png

Hinweis

In diesem Artikel gibt es viele Teile, die als "XX tun" oder "XX tun" behauptet und als Mittel für einen begrenzten Zweck erklärt werden, aber dies dient dazu, das Bild zu erfassen. Dies ist die Methode, mit der es zum ersten Ziel gemacht wird, und angesichts der langen Lernspanne gibt es einige Probleme.

Referenz

Erste Schritte Python3 Offizielles Dokument

Recommended Posts

Ich möchte die Frage nach der Methode "__init__" und dem Argument "self" der Python-Klasse klären.
Ich möchte die Natur von Python und Pip kennenlernen
Ich möchte die abstrakte Klasse (ABCmeta) von Python im Detail erklären
Python: Ich möchte die Verarbeitungszeit einer Funktion genau messen
Warum ist das erste Argument der [Python] -Klasse selbst?
Nehmen Sie eine Instanz einer Python-Ausnahmeklasse nicht direkt als Argument für die Ausnahmeklasse!
Verwendung der Methode __call__ in der Python-Klasse
Ich möchte viele Prozesse von Python aus starten
Ich möchte den Namen der ausgeführten Funktion / Methode erhalten
[Einführung in Python] Ich habe die Namenskonventionen von C # und Python verglichen.
Ich möchte den Anfang des nächsten Monats mit Python ausgeben
Ich möchte sowohl den Schlüssel als auch den Wert des Python-Iterators verwenden
Eine Geschichte über das Schreiben von AWS Lambda und ein wenig Abhängigkeit von den Standardwerten von Python-Argumenten
Ich möchte Tag-Informationen (Titel und Künstler) einer Musikdatei (flac, wav) extrahieren.
Ich möchte eine Python-Umgebung erstellen
Ich möchte das Ergebnis von "Zeichenfolge" .split () in Python stapelweise konvertieren
Treffen Sie eine Methode einer Klasseninstanz mit der Python Bottle Web API
Ich möchte einen Teil der Excel-Zeichenfolge mit Python einfärben
Ich habe versucht, die Beschleunigung von Python durch Cython zu verifizieren und zu analysieren
Ich möchte die Gefühle von Menschen analysieren, die sich treffen und zittern wollen
Ich habe ein Programm erstellt, um die Größe einer Datei mit Python zu überprüfen
Ich möchte eine Webanwendung mit React und Python Flask erstellen
Ich habe eine Funktion erstellt, um die Bewegung eines zweidimensionalen Arrays (Python) zu sehen.
Ich möchte mit Python ein Fenster erstellen
Ich möchte ein Spiel mit Python machen
Ich habe eine Klasse in Python3 und Java geschrieben
Ich möchte das Erscheinungsbild von zabbix anpassen
Berücksichtigung der Stärken und Schwächen von Python
Ich möchte mit Python in eine Datei schreiben
Ich möchte den Fortschritt in Python anzeigen!
Die Geschichte der IPv6-Adresse, die ich auf ein Minimum beschränken möchte
Ich möchte Python in der Umgebung von pyenv + pipenv unter Windows 10 verwenden
Ich möchte einen Lebenszyklus in der Aufgabendefinition von ECS festlegen
Ich möchte dem Anfang einer WAV-Datei 1 Sekunde lang Stille hinzufügen
Ich möchte ein Programm ausführen und verteilen, das die Größe von Bildern in Python3 + Pyinstaller ändert
Ich möchte eine Liste der WebDAV-Dateien im Modul Anfragen anzeigen
Ich möchte das Bild entlang der Kontur anstelle des Rechtecks zuschneiden [Python OpenCV]
Ich habe ein Tool zum automatischen Sichern der Metadaten der Salesforce-Organisation erstellt
Python-Programm ist langsam! Ich möchte beschleunigen! In einem solchen Fall ...
Ich möchte den Dateinamen, die Zeilennummer und den Funktionsnamen in Python 3.4 erhalten
Ich habe ein Skript erstellt, das das aktive Fenster mit win32gui von Python aufzeichnet
Ich möchte ein Pfaddiagramm der verteilten co-verteilten Strukturanalyse (SEM) ausgeben, indem ich Python und R verbinde.
Wenn Sie eine Methode in einer Ruby-Klasse definieren und dann eine Methode darin definieren, wird sie zu einer Methode der ursprünglichen Klasse.
Ich möchte eine Variable in einen Python-String einbetten
Ich möchte Timeout einfach in Python implementieren
Ich möchte einen Python-Generator viele Male iterieren
Ich möchte schnell UUID generieren (Gedenknotiz) ~ Python Edition ~
Ich habe versucht, das Update von "Werde ein Romanautor" mit "IFTTT" und "Werde ein Romanautor API" zu benachrichtigen.
Ich möchte die Optimierung mit Python und CPlex behandeln
Ich möchte in Python schreiben! (2) Schreiben wir einen Test
[Python] Ich habe ein System erstellt, um "das Rezept, das ich wirklich will" von der Rezeptseite einzuführen!
Ich habe versucht, das Artikel-Update des Livedoor-Blogs mit Python und Selen zu automatisieren.
Ich möchte eine Datei mit Python zufällig testen
Ich möchte mit Python-Datenklasse nach hinten erben
Ich möchte die Grundlagen von Bokeh vollständig verstehen
Ich möchte mit einem Roboter in Python arbeiten.
Ich möchte einen Screenshot der Site in Docker mit einer beliebigen Schriftart erstellen