__init__, das von wxPython oder Tkinter aufgerufen wurde, war ein __init__ -Aufruf der geerbten Klasse in Python

Feste Phrasen, die häufig in Tkinter- und wxPython-Konstruktoren vorkommen

Beim Erstellen einer Klasse, die ein Widget wie tk.Frame, wx.Panel in Tkinter, wxPython erbt, gibt es eine feste Phrase, die immer im Beispiel enthalten ist und auch von mir selbst verwendet wird.

class MyTkinterFrame(tk.Frame):
    def __init__(self, master = None):
        #Dies!
        tk.Frame.__init__(self, master)
        ...

class MyWxPanel(wx.Panel):
    def __init__(self, parent = None):
        #Das auch!
        wx.Frame.__init__(self, master = None):
        ...

Ich verstehe die Bedeutung dieses Prozesses nicht, aber wenn ich ihn nicht hinzufüge, tritt ein Fehler auf, und ich dachte, es sei vorerst ein Zauber, aber wenn ich mir das genau überlege, habe ich nur den Konstruktor der Vererbungsquellenklasse ** aufgerufen. Ich habe es bemerkt, also mach dir eine Notiz.

Ist es nicht zu offensichtlich für diejenigen, die es wissen? Auch wenn Sie es nicht wissen, können Sie ein wunderbares Tkinter, wxPython Life, verbringen, wenn Sie es vorerst schreiben. Bitte verwenden Sie es als Bohnenwissen.

Nachtrag @ 2017-01-18

Ich habe einen Kommentar erhalten, aber einen Fehler gemacht. Im Text wird `__init ___` als Konstruktor bezeichnet, und der Aufruf von __init __``` wird als Konstruktoraufruf bezeichnet. Aber Pythons __init __``` ist kein Konstruktor. Es tut mir leid zu verstehen, dass es wahrscheinlich ein Initialisierungsprozess ist, wenn etwas gefragt wird, aber ... Referenz: [Informationen zur Basisklasse `` init ()` ``](http://kk6.hateblo.jp/entry/20110429/1304074964) Ich kannte den richtigen Ersatz nicht, also habe ich nicht den ganzen Satz korrigiert. Bitte lesen Sie den Teil, der im Text als Konstruktor bezeichnet wird, sorgfältig durch. )

Implizites Argument selbst

In Python wird das implizite Argument `` `self``` beim Aufrufen einer Instanzmethode einer Klasse ausgeblendet. Der nächste Aufruf kann denselben Prozess aufrufen.

class SomeClass:
    def SomeMethod(self):
        # do something
        ...
    
    def OtherMethod(self):
        self.SomeMethod()   #Teil 1

    def AnotherMethod(self):
        # SomeMethod(self)    #Teil 2<-Nachtrag:Dieser Aufruf führt zu einem Fehler, aber ich habe ihn aufgrund fehlender Bestätigung geschrieben und ihn behoben.
        SomeClass.SomeMethod(self)   #Teil 2

Übrigens könnte es sowohl in * 2 * -Notation als auch außerhalb der Klasse aufgerufen werden.

instance = SomeClass()
instance.SomeMethod()     #Teil 1
SomeClass.SomeMethod(instance)  #Teil 2

Rufen Sie `` `init``` der ererbenden Klasse von der ererbenden Klasse auf

In Python ruft der Konstruktor der ererbenden Klasse die geerbte Klasse nicht implizit auf. Daher ist es beim Erben erforderlich, den erbenden Quellkonstruktor explizit aufzurufen.

class MyInherit(MySuper):
    def __init__(self):
       #Rufen Sie den Vererbungskonstruktor auf
       #Die folgende Notation kann nur mit Python3 verwendet werden
       super().__init__()

Oder

class MyInherit(MySuper):
    def __init__(self):
       #Rufen Sie den Vererbungskonstruktor auf,Python 2 ist in Ordnung
       super(MySuper, self).__init__()

Es ist eine sehr persönliche Angelegenheit, aber ich programmiere selten mit Vererbung. In Python, Tkinter und wxPython scheint es jedoch ganz normal zu sein, also habe ich es gelernt.

(Referenz: Verwendung der super () - Funktion von Python)

Ordnen Sie die explizite Selbstspezifikation dem Aufruf init der ererbenden Klasse zu

Und die fragliche feste Phrase.

Aufrufe an den Konstruktor `__init __``` der ererbenden Klasse können ohne Verwendung von` super () `erfolgen. Dies kann häufiger als __ init__``` Aufruf an die erbende Klasse sein. `` self``` wird explizit als Argument übergeben und aufgerufen.

class MyInherit(MySuper):
    def __init__(self):
       #Rufen Sie den Vererbungskonstruktor auf
       # Python 2,Möglich in beiden Python 3
       MySuper.__init__(self)
       ...

Aha!

Warum hast du das nicht bemerkt?

~~ Stolz und Glaube ~~ Die Sprache, die ich bisher am häufigsten verwendet habe, war C #, und die Methode zum Aufrufen des Vererbungsquellenkonstruktors war unterschiedlich. Auch wenn es um Klassenmethoden geht, dachte ich, es sei natürlich, <Instanzvariable> aufzurufen. <Methode> (...) `.

Der C # -Vererbungsquellkonstruktor muss aufgerufen werden, wenn der Konstruktor deklariert wird.

class MyInherit : MySuper
{
    //Konstrukteur
    public MyInherit(int val) : MySuper(val)
    {
        // do initialize...
    }
}

Ich habe C ++ oder Java nicht berührt, aber es scheint, dass auch ein impliziter Aufruf des Vererbungsquellenkonstruktors erfolgt.

(Referenz: C # -Konstruktor und -Destruktor)

Zusammenfassung

Für mich persönlich möchte ich mich daran erinnern, wie man verwendet und schreibt, und erklären, warum es so einen Unterschied wie ** kulturellen Unterschied ** gibt, und mit dem nächsten Schritt fortfahren.

Ich denke auch, dass `` super () .__ init__ () `in Bezug auf Lesbarkeit und einfache Kommunikation der Bedeutung ausgezeichnet ist, aber wenn es eine Funktion von Python3 ist, wird es von nun an durchdrungen. Es wird eine Geschichte sein. Ich möchte es positiv nutzen.

Bestätigte Umgebung

Recommended Posts

__init__, das von wxPython oder Tkinter aufgerufen wurde, war ein __init__ -Aufruf der geerbten Klasse in Python
Verwendung der Methode __call__ in der Python-Klasse
Lesen Sie die Standardausgabe eines Unterprozesses zeilenweise in Python
Holen Sie sich den Aufrufer einer Funktion in Python
Kopieren Sie die Liste in Python
Ausgabe in Form eines Python-Arrays
Sie können die Methode der Klasse direkt in Python3 aufrufen, ohne @staticmethod hinzuzufügen
Gruppieren Sie nach aufeinanderfolgenden Elementen einer Liste in Python
Ein Memorandum über die Umsetzung von Empfehlungen in Python
Finden Sie die scheinbare Breite einer Zeichenfolge in Python heraus
Ich habe eine Klasse erstellt, um das Analyseergebnis von MeCab in ndarray mit Python zu erhalten
[Python] Was wird zuerst ausgeführt, Klassenvariable oder __init__?
[Hinweis] Import von Dateien in das übergeordnete Verzeichnis in Python
Finden Sie die Eigenwerte einer reellen symmetrischen Matrix in Python
[Python] Verwendung der for-Anweisung. Eine Methode zum Extrahieren durch Angabe eines Bereichs oder von Bedingungen.
Ich möchte die Frage nach der Methode "__init__" und dem Argument "self" der Python-Klasse klären.
Erstellen Sie eine Instanz einer vordefinierten Klasse aus einer Zeichenfolge in Python
Eine einfache Datenanalyse von Bitcoin, die von CoinMetrics in Python bereitgestellt wird
[In der Abbildung verstanden] Verwaltung der virtuellen Python-Umgebung durch Pipenv
So überprüfen Sie die Speichergröße einer Variablen in Python
So überprüfen Sie die Speichergröße eines Wörterbuchs in Python
Eine Funktion, die die Verarbeitungszeit einer Methode in Python misst
Holen Sie sich die Anzahl der Leser von Artikeln über Mendeley in Python
Untersuchen Sie die Klasse eines Objekts mit Python
Erweiterung von Python um C oder C ++ (wenn es mehrere Argumente gibt, wenn eine Liste von der Python-Seite übergeben wird)
Python VBA, um mit Selenium die gesamte WEB-Seite zu erfassen
Wenn Sie einen Singleton in Python möchten, stellen Sie sich das Modul als Singleton vor
Ein Memo, das durch Umbenennen der Dateinamen im Ordner mit Python organisiert wird
Überprüfen Sie die speicherinterne Byte-Zeichenfolge der Gleitkommazahl in Python
Wird der Leerzeichen bei der Verarbeitung der prozentualen Codierung durch ein Pluszeichen oder% 20 ersetzt?
Ich möchte die abstrakte Klasse (ABCmeta) von Python im Detail erklären
Treffen Sie eine Methode einer Klasseninstanz mit der Python Bottle Web API
Erhalten Sie eine Liste der Ergebnisse der Parallelverarbeitung in Python mit Starmap
So formatieren Sie eine Liste von Wörterbüchern (oder Instanzen) in Python
Holen Sie sich zu jeder Tageszeit eine Datums- / Uhrzeitinstanz in Python
Ich habe ein Programm erstellt, um die Größe einer Datei mit Python zu überprüfen
Sortieren durch Angabe einer Spalte im Python Numpy-Array.
Generieren Sie eine erstklassige Sammlung in Python
Überprüfen Sie das Verhalten des Zerstörers in Python
[Lernnotiz] Grundlagen des Unterrichts mit Python
Schreiben Sie den Test in die Python-Dokumentzeichenfolge
Zeigen Sie eine Liste der Alphabete in Python 3 an
Nehmen Sie die logische Summe von List in Python (Zip-Funktion)
Verbinde viel Python oder und und
Führen Sie den Python-Interpreter im Skript aus
Das Ergebnis der Installation von Python auf Anaconda
Lesen Sie die Datei Zeile für Zeile mit Python
Lesen Sie die Datei Zeile für Zeile mit Python
[Python] [Meta] Ist der Python-Typ ein Typ?
Grundlagen zum Ausführen von NoxPlayer in Python
Pandas des Anfängers, vom Anfänger, für den Anfänger [Python]
Generieren Sie eine Klasse aus einer Zeichenfolge in Python
Nicht logische Operatorverwendung von oder in Python
Auf der Suche nach dem schnellsten FizzBuzz in Python
Die Geschichte der Verarbeitung A von Blackjack (Python)
Verschiedene Möglichkeiten, die letzte Zeile einer CSV-Datei in Python zu lesen
So übergeben Sie das Ergebnis der Ausführung eines Shell-Befehls in einer Liste in Python
Python scikit-learn Eine Sammlung von Tipps für Vorhersagemodelle, die häufig im Feld verwendet werden