__init__ appelé par wxPython ou Tkinter était un appel __init__ de la classe héritée en Python

Phrases fixes souvent vues dans les constructeurs Tkinter, wxPython

Lors de la création d'une classe qui hérite de n'importe quel widget tel que tk.Frame, wx.Panel dans Tkinter, wxPython, il existe une phrase fixe qui est toujours dans l'exemple et qui est également utilisée par moi-même.

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

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

Je ne comprends pas la signification de ce processus, mais si je ne l'ajoute pas, une erreur se produira, alors j'ai pensé que c'était un sort pour le moment, mais quand j'y réfléchis attentivement, j'appelle juste le constructeur de la classe source d'héritage **. Je l'ai remarqué, alors prenez note.

N'est-ce pas trop évident pour ceux qui le savent? De plus, même si vous ne le savez pas, vous pouvez passer un merveilleux Tkinter, wxPython Life si vous l'écrivez pour le moment. Veuillez l'utiliser comme une connaissance du haricot.

Supplément @ 2017-01-18

J'ai reçu un commentaire, mais j'ai fait une erreur. Dans le texte, init ___ '' est appelé le constructeur, et l'appel à __ init``` est appelé l'appel du constructeur. Mais __init __ '' de Python n'est pas un constructeur. Je suis désolé de comprendre que c'est probablement un processus d'initialisation lorsqu'on lui demande quelque chose, mais ... Référence: [À propos de la classe de base `` init () '' ''](http://kk6.hateblo.jp/entry/20110429/1304074964) Je ne connaissais pas le remplacement approprié, donc je n'ai pas corrigé toute la phrase. Veuillez lire attentivement la partie appelée constructeur dans le texte. )

Argument implicite de soi

En Python, l'argument implicite `` self``` est masqué lors de l'appel d'une méthode d'instance d'une classe. L'appel suivant peut appeler le même processus.

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

    def AnotherMethod(self):
        # SomeMethod(self)    #Partie 2<-Postscript:Cet appel entraînera une erreur, mais je l'ai écrit faute de confirmation, alors je l'ai corrigé.
        SomeClass.SomeMethod(self)   #Partie 2

À propos, il pourrait être appelé à la fois en notation * 2 * et en dehors de la classe.

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

Appelez `` init``` de la classe héritière de la classe héritière

En Python, le constructeur de la classe héritée n'appelle pas implicitement la classe héritée. Par conséquent, lors de l'héritage, il est nécessaire d'appeler explicitement le constructeur source héritant.

class MyInherit(MySuper):
    def __init__(self):
       #Appelez le constructeur héritier
       #La notation suivante ne peut être utilisée qu'avec Python3
       super().__init__()

Ou

class MyInherit(MySuper):
    def __init__(self):
       #Appelez le constructeur héritier,Python 2 est OK
       super(MySuper, self).__init__()

C'est une affaire très personnelle, mais je programme rarement avec héritage. Cependant, cela semble être tout à fait normal en Python, Tkinter et wxPython, donc je l'ai appris.

(Référence: Comment utiliser la fonction super () de Python)

Aligner l'auto-spécification explicite avec l'appel init de la classe héritière

Et la phrase fixe en question.

Les appels au constructeur __init __ de la classe héritière peuvent être effectués sans utiliser `` `` super () '' ``. Cela peut être plus courant comme un appel `` `` __ init__ à la classe héritière. self``` est explicitement passé en argument et appelé.

class MyInherit(MySuper):
    def __init__(self):
       #Appelez le constructeur héritier
       # Python 2,Possible dans les deux Python 3
       MySuper.__init__(self)
       ...

Je vois!

Pourquoi n'avez-vous pas remarqué cela?

~~ Fierté et croyance ~~ Le langage que j'ai le plus utilisé jusqu'à présent était C #, et la méthode d'appel du constructeur de source d'héritage était différente. De plus, en ce qui concerne les méthodes de classe, j'ai pensé qu'il était naturel d'appeler <instance variable>. <Method> (...).

Le constructeur de la source d'héritage C # est appelé lorsque le constructeur est déclaré.

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

Je n'ai pas touché C ++ ou Java, mais il semble qu'un appel de constructeur de source d'héritage implicite soit également effectué.

(Référence: Constructeur et destructeur C #)

Résumé

Pour moi personnellement, je voudrais me rappeler comment utiliser et écrire, et expliquer pourquoi il y a une telle différence que ** différence culturelle ** et passer à l'étape suivante.

Aussi, je pense que `` super () .__ init__ () '' est excellent en termes de lisibilité et de facilité de communication du sens, mais si c'est une fonction de Python3, elle sera pénétrée à partir de maintenant. Ce sera une histoire. Je veux l'utiliser positivement.

Environnement confirmé

Recommended Posts

__init__ appelé par wxPython ou Tkinter était un appel __init__ de la classe héritée en Python
Comment utiliser la méthode __call__ dans la classe Python
Lire la sortie standard d'un sous-processus ligne par ligne en Python
Récupérer l'appelant d'une fonction en Python
Copiez la liste en Python
Sortie sous la forme d'un tableau python
Vous pouvez appeler la méthode de la classe directement dans Python3 sans ajouter @staticmethod
Regrouper par éléments consécutifs d'une liste en Python
Un mémorandum sur la mise en œuvre des recommandations en Python
Découvrez la largeur apparente d'une chaîne en python
J'ai créé une classe pour obtenir le résultat de l'analyse par MeCab dans ndarray avec python
[Python] Qui est exécuté en premier, variable de classe ou __init__?
[Note] Importation de fichiers dans le répertoire parent en Python
Trouver les valeurs propres d'une vraie matrice symétrique en Python
[Python] Comment utiliser l'instruction for. Une méthode d'extraction en spécifiant une plage ou des conditions.
Je veux clarifier la question de la méthode "__init__" et de l'argument "self" de la classe Python.
Créer une instance d'une classe prédéfinie à partir d'une chaîne en Python
Une analyse simple des données de Bitcoin fournie par CoinMetrics en Python
[Compris dans la figure] Gestion de l'environnement virtuel Python par Pipenv
Comment vérifier la taille de la mémoire d'une variable en Python
Comment vérifier la taille de la mémoire d'un dictionnaire en Python
Une fonction qui mesure le temps de traitement d'une méthode en python
Obtenez le nombre de lecteurs d'articles sur Mendeley en Python
Examiner la classe d'un objet avec python
Extension de Python par C ou C ++ (lorsqu'il y a plusieurs arguments, lors du passage d'une liste du côté Python)
Python VBA pour obtenir une capture de la page WEB entière avec Selenium
Si vous voulez un singleton en python, considérez le module comme un singleton
Un mémo organisé en renommant les noms de fichiers dans le dossier avec python
Vérifions la chaîne d'octets en mémoire du nombre flottant flottant en Python
L'espace est-il remplacé par un signe plus ou% 20 dans le traitement du codage en pourcentage?
Je veux expliquer en détail la classe abstraite (ABCmeta) de Python
Hit une méthode d'une instance de classe avec l'API Web Python Bottle
Recevez une liste des résultats du traitement parallèle en Python avec starmap
Comment bien formater une liste de dictionnaires (ou d'instances) en Python
Obtenez une instance datetime à tout moment de la journée en Python
J'ai fait un programme pour vérifier la taille d'un fichier avec Python
Comment trier en spécifiant une colonne dans le tableau Python Numpy.
Générer une collection de première classe en Python
Vérifiez le comportement du destroyer en Python
[Mémo d'apprentissage] Bases de la classe par python
Ecrire le test dans la docstring python
Afficher une liste d'alphabets en Python 3
Prenez la somme logique de List en Python (fonction zip)
Connectez beaucoup de Python ou et et
Exécuter l'interpréteur Python dans le script
Le résultat de l'installation de python sur Anaconda
Lisez le fichier ligne par ligne avec Python
Lisez le fichier ligne par ligne avec Python
[python] [meta] Le type de python est-il un type?
Principes de base pour exécuter NoxPlayer en Python
Pandas du débutant, par le débutant, pour le débutant [Python]
Générer une classe à partir d'une chaîne en Python
Utilisation d'opérateurs non logiques de ou en python
À la recherche du FizzBuzz le plus rapide en Python
L'histoire du traitement A du blackjack (python)
Différentes façons de lire la dernière ligne d'un fichier csv en Python
Comment passer le résultat de l'exécution d'une commande shell dans une liste en Python
Python scikit-learn Une collection de conseils de modèles prédictifs souvent utilisés sur le terrain