Je veux clarifier la question de la méthode "__init__" et de l'argument "self" de la classe Python.

Résumé de cet article

Cet article doit être aussi intuitif que possible pour ceux qui écrivent "def \ _ \ _ init \ _ \ _ (self):" qui apparaît dans la définition de classe Python comme s'ils étaient mémorisés pour le moment. J'ai écrit pour le faire.

Définition de classe Python

Python prend le format suivant lors de la définition d'une classe.

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

Comme ce n'est pas intuitif (pour python), je pense qu'il y a beaucoup de débutants autres que moi qui ont du mal.

Explications telles que les livres de référence (Introduction à Python 3)

\ _ \ _ Init \ _ \ _ () est un nom spécial donné à la méthode qui initialise un objet individuel lorsqu'il est créé à partir de la définition de classe.

Eh bien, je ne sais pas si vous en dites autant. Cependant, cette introduction à Python 3 a continué à expliquer ce que fait le système de traitement Python, et c'était facile à comprendre, donc je vais le résumer et l'expliquer avec des chiffres supplémentaires.

Pour faciliter l'explication, ajoutez le nom de la variable membre de la classe et ajoutez l'élément pour ajouter "hoge".


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

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


[Résultat de sortie]

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

Image du comportement des classes Python

python peut instancier des classes tout comme exécuter une fonction. Une instance est une entité d'un objet, et l'instanciation signifie en gros rendre un programme exécutable en mémoire.

En fait, d'où s'exécute l'interpréteur python dans la ligne ci-dessous?

a = demo_class("hoge")
  1. Reportez-vous à la définition de la classe demo_class
  2. Créez un objet vide de la classe demo_class
  3. Initialisez l'objet de classe demo_class en fonction de l'argument
  4. Attribuez la chaîne "hoge" au nom de la variable membre
  5. Nommez l'objet a

Il sera traité dans l'ordre ci-dessus. Cela ressemble à la figure ci-dessous obj.dot.png

obj.dot.png

obj.dot.png

Explication de la figure

Tout d'abord, créez un objet de classe vide à partir de la définition de classe

obj.dot.png

L'objet de classe généré doit modifier l'objet précédent pour s'initialiser (ajouter "hoge" au membre de nom). Pour le moment, de l'interpréteur python, je ne sais pas quel type d'initialisation doit être fait à quel objet, et je ne sais pas comment faire référence à la variable.

La méthode \ _ \ _ init \ _ \ _ est une méthode spéciale d'initialisation.

Autrement dit, ** pour indiquer clairement quel objet vous voulez que l'interpréteur Python initialise et comment ** à la méthode spéciale \ _ \ _ init \ _ \ _ méthode d'initialisation ** l'objet vide que vous venez de créer Est passé comme argument auto **.

obj.dot.png

Cela vous permet d'identifier vos propres objets et élimine le besoin de créer des noms supplémentaires pour chaque classe.

Le problème ici est "self.name".


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

Le "self.name" sur le côté gauche ** définit une variable membre **, donc ** créez une variable de nom dans l'objet et attribuez le nom contenant l'argument "hoge" ** C'est. En d'autres termes, ** le nom sur la première ligne et le nom sur le côté droit de la deuxième ligne représentent des choses différentes **. Comme c'est la même chose, je pense que c'est difficile à comprendre à première vue.

La raison de l'hypothèse de «soi» est qu'elle rend explicite à quel objet l'interprète doit se référer pour le traitement. (peut être)

(En python, tout ce qui suit un "." Est appelé un attribut.)

obj.dot.png

Mise en garde

Dans cet article, il y a de nombreuses parties qui sont affirmées comme «faire XX» ou «faire XX» et expliquées comme un moyen dans un but limité, mais il s'agit de saisir l'image. C'est une méthode adoptée pour en faire le premier objectif, et il y a quelques problèmes compte tenu de la longue durée d'apprentissage.

référence

Premiers pas avec Python3 Document officiel

Recommended Posts

Je veux clarifier la question de la méthode "__init__" et de l'argument "self" de la classe Python.
Je veux connaître la nature de Python et pip
Je veux expliquer en détail la classe abstraite (ABCmeta) de Python
Python: je souhaite mesurer proprement le temps de traitement d'une fonction
Pourquoi le premier argument de la classe [Python] est-il self?
Ne prenez pas une instance d'une classe d'exception Python directement comme argument de la classe d'exception!
Comment utiliser la méthode __call__ dans la classe Python
Je veux démarrer beaucoup de processus à partir de python
Je veux obtenir le nom de la fonction / méthode en cours d'exécution
[Introduction à Python] J'ai comparé les conventions de nommage de C # et Python.
Je veux sortir le début du mois prochain avec Python
Je souhaite utiliser à la fois la clé et la valeur de l'itérateur Python
Une histoire sur l'écriture d'AWS Lambda et de devenir un peu accro aux valeurs par défaut des arguments Python
Je souhaite extraire les informations d'étiquette (titre et artiste) d'un fichier de musique (flac, wav).
Je veux créer un environnement Python
Je veux convertir par lots le résultat de "chaîne de caractères" .split () en Python
Hit une méthode d'une instance de classe avec l'API Web Python Bottle
Je veux colorer une partie de la chaîne Excel avec Python
J'ai essayé de vérifier et d'analyser l'accélération de Python par Cython
Je veux analyser les sentiments des gens qui veulent se rencontrer et trembler
J'ai fait un programme pour vérifier la taille d'un fichier avec Python
Je souhaite créer une application Web en utilisant React et Python flask
J'ai créé une fonction pour voir le mouvement d'un tableau à deux dimensions (Python)
Je veux créer une fenêtre avec Python
Je veux faire un jeu avec Python
J'ai écrit une classe en Python3 et Java
Je souhaite personnaliser l'apparence de zabbix
Prise en compte des forces et faiblesses de Python
Je veux écrire dans un fichier avec Python
Je veux afficher la progression en Python!
L'histoire de l'adresse IPv6 que je souhaite conserver au minimum
Je souhaite utiliser Python dans l'environnement de pyenv + pipenv sous Windows 10
Je souhaite définir un cycle de vie dans la définition de tâche d'ECS
Je veux ajouter du silence pendant 1 seconde au début d'un fichier wav
Je veux exécuter et distribuer un programme qui redimensionne les images Python3 + pyinstaller
Je souhaite voir une liste de fichiers WebDAV dans le module Requêtes
Je veux recadrer l'image le long du contour au lieu du rectangle [python OpenCV]
J'ai créé un outil pour sauvegarder automatiquement les métadonnées de l'organisation Salesforce
Le programme Python est lent! Je veux accélérer! Dans ce cas ...
Je veux obtenir le nom du fichier, le numéro de ligne et le nom de la fonction dans Python 3.4
J'ai fait un script pour enregistrer la fenêtre active en utilisant win32gui de Python
Je souhaite générer un diagramme de chemin d'analyse de structure distribuée co-distribuée (SEM) en reliant Python et R.
Si vous définissez une méthode dans une classe Ruby, puis définissez une méthode dans celle-ci, elle devient une méthode de la classe d'origine.
Je souhaite intégrer une variable dans une chaîne Python
Je veux facilement implémenter le délai d'expiration en python
Je veux répéter plusieurs fois un générateur Python
Je veux générer rapidement UUID (memo memo) ~ Edition Python ~
J'ai essayé de notifier la mise à jour de "Devenir romancier" en utilisant "IFTTT" et "Devenir un romancier API"
Je veux gérer l'optimisation avec python et cplex
Je veux écrire en Python! (2) Écrivons un test
[Python] J'ai créé un système pour introduire "la recette que je veux vraiment" depuis le site de recettes!
J'ai essayé d'automatiser la mise à jour de l'article du blog Livedoor avec Python et sélénium.
Je veux échantillonner au hasard un fichier avec Python
Je veux hériter de l'arrière avec la classe de données python
Je veux bien comprendre les bases de Bokeh
Je veux travailler avec un robot en python.
Je souhaite prendre une capture d'écran du site sur Docker en utilisant n'importe quelle police