[Hikari-Python] Chapitre 09-02 Classes (Création et instanciation de classes)

[Python] Chapitre 09-02 Création et instanciation de classes

Dans la section précédente, nous avons expliqué ce qu'est un objet et expliqué que les nombres, les listes, etc. sont tous des objets. Par exemple, des objets numériques et des objets de liste.

Cette fois, je voudrais aborder la façon de créer vous-même un objet.

Qu'est-ce qu'un dessin de conception d'objet?

J'ai expliqué qu'en Python, il existe des types d'objets numériques, de liste et de chaîne. Par exemple, dans le cas d'un objet de type chaîne de caractères, il existe des actions (méthodes) telles que "ne mettre en majuscule que le début des données" et "rechercher le caractère spécifié dans les données".

Il s'agit d'un objet de type chaîne, mais en fait, il existe un ** dessin de conception ** de cet objet de type chaîne en Python. (Je n'en suis généralement pas conscient) Ce dessin de conception est appelé ** classe **.

Jusqu'à présent, j'ai utilisé des nombres, des chaînes de caractères, des listes, etc. sans le savoir, mais chaque fois que je les utilise, je crée des objets basés sur ** des dessins de conception (classes). ** **

Dans ce dessin de conception, par exemple, ** que faire avec les données (également appelées attributs ou propriétés) **, ** comment gérer les méthodes **, etc. sont écrits.

Voici un diagramme de conception d'objet appelé diagramme de classes (*) </ font>, qui est souvent utilisé lors de la conception de la programmation.

Par exemple, l'exemple du diagramme de classes ci-dessous est un diagramme de conception représentant une personne.

image.png

Le diagramme de classes (*) </ font> est l'un des diagrammes de base d'UML (Unified Modeling Language), et il exprime souvent les relations entre les classes qui composent le système. Indique les attributs et les méthodes que contient la classe.

Créer une classe

Maintenant, j'aimerais enfin créer une classe et créer un objet original. Premièrement, en général, écrivez comme suit.

nom de classe de classe:
Constructeurs et méthodes qui définissent les classes

Il y a des termes dont je n'ai pas entendu parler, mais je les expliquerai plus tard, mais sous le: (deux-points), je vais décrire le contenu du diagramme de classes ci-dessus.

Cependant, il est difficile de faire des choses générales soudainement, alors nous allons expliquer ici en utilisant un exemple de définition de classe qui représente un oiseau. Créons un programme objet de type Bird en supposant qu'il possède les données (attributs) et méthodes suivantes. 【attribut】 · Nom · Couleur

** [Méthode] ** ・ Méthode de vol -Méthode pour imprimer le statut des oiseaux (print_status)

Tout d'abord, montrons cela dans un diagramme de classes. image.png

Tout d'abord, créons-le à partir d'une classe de type Bird. Écrivez le code suivant dans samp09_02_01.py </ font>. * </ font> À partir de ce moment, nous le nommerons avec _ (trait de soulignement) de ** samp09_02_01.py ** au lieu de samp09-02-01.py.

.samp09_02_01.py


class Bird:
    def __init__(self, name, color):
        print('-----Appelez le constructeur dès que vous l'instanciez.-----')
        self.name = name
        self.color = color

    #La méthode de voler
    def flying(self, m):
        print('-----Appelez la méthode de vol.-----')
        print(f'Avec bruissement{self.name}Voler dans le ciel.')
        print(f'{m}Voler à une hauteur de m.')

    #Une méthode qui génère le statut de l'oiseau instancié
    def print_status(self):
        print('-----print_Appelez la méthode d'état.-----')
        print(f'{self.color}C'est un oiseau coloré.')

Maintenant, exécutons ce programme "méthode de vol (flying)" et "méthode d'impression d'état (print_status)" avec le diagramme de classes. Mais vous pouvez voir que rien ne s'affiche.

Pour résoudre ce problème, vous avez besoin de ** instanciation **.

Instanciation

Pour le moment, le résultat de l'exécution n'était pas affiché dans le programme ci-dessus, mais dans le programme ci-dessus, je viens de faire un dessin de conception de la classe Bird, c'est-à-dire ** type Bird **. A ce stade, nous avons uniquement défini le type «Bird is like this», et il n'y a pas d'entité d'oiseau concrète. (A titre d'exemple, le type de Thai-yaki est défini, mais le Thai-yaki lui-même n'est pas fait)

Il est nécessaire de se matérialiser à partir de ce dessin de conception, et cela s'appelle ** instanciation **. Les autres matérialisés sont appelés ** instances **.

Vous devez ajouter le code suivant pour l'instancier. Ajoutez le code suivant à samp09_02_01.py </ font>.

.samp09_02_01.py


class Bird:
    def __init__(self, name, color):
        print('-----Appelez le constructeur dès que vous l'instanciez.-----')
        self.name = name
        self.color = color

    #La méthode de voler
    def flying(self, m):
        print('-----Appelez la méthode de vol.-----')
        print(f'Avec bruissement{self.name}Voler dans le ciel.')
        print(f'{m}Voler à une hauteur de m.')

    #Une méthode qui génère le statut de l'oiseau instancié
    def print_status(self):
        print('-----print_Appelez la méthode d'état.-----')
        print(f'{self.color}C'est un oiseau coloré.')


#Spécifiez le nom et la couleur de l'oiseau lors de l'instanciation et attribuez-le à une variable appelée chi
chi = Bird('Chitti', 'thé')

En faisant cela, vous pouvez créer une instance de Bird, qui est illustrée dans la figure ci-dessous. image.png

Oiseau avec une variable appelée ** chi ** (précédemment décrite comme une balise).

constructeur

Comme mentionné dans les commentaires du programme, le lieu ** def \ _ \ _ init \ __ (self, name, color): ** est appelé ** constructeur **.

En fait, sans ce constructeur, les données (attributs) ** name ** (cette fois "chitch") et ** color ** (cette fois "brown") ne seront pas reflétées lors de l'instanciation.

Par conséquent, afin de refléter les données (attribut) en même temps en instanciant, la valeur est reflétée respectivement dans ** nom ** et ** couleur ** dans le constructeur.

Je suis curieux de connaître ce ** soi **, mais en fait, il montre ** l'instance elle-même ** et peut être le ** premier argument **. (Il n'est pas nécessaire de l'appeler soi-même, mais il est souvent habituel de l'appeler soi-même.) Ainsi, dans le constructeur, "self.name = name" signifie que ** "nom de l'instance elle-même" ** est remplacé par ** "name (contient en fait la valeur" chitchi ")" **. Je le fais.

Ce faisant, il est possible de donner à l'oiseau instancié (Bird) les attributs suivants. * </ font> Confirmez que la couleur est "brown" et que le nom est "chitch".

image.png

Faire fonctionner ce qui est instancié

Jusqu'à présent, nous avons créé un objet en créant une classe de type Bird et en l'instanciant. Comme je l'ai mentionné dans la section précédente, j'ai expliqué que ** les objets ont des données (attributs) et des méthodes **. Et cette fois? Les objets de type oiseau ont les attributs ** name ** et ** color **, et les méthodes ** flying () ** et ** print_status () **.

Exploitons-les réellement. Veuillez ajouter au programme précédent. (L'ajout est proche de la fin)

.samp09_02_01.py


class Bird:
    def __init__(self, name, color):
        print('-----Appelez le constructeur dès que vous l'instanciez.-----')
        self.name = name
        self.color = color

    #La méthode de voler
    def flying(self, m):
        print('-----Appelez la méthode de vol.-----')
        print(f'Avec bruissement{self.name}Voler dans le ciel.')
        print(f'{m}Voler à une hauteur de m.')

    #Une méthode qui génère le statut de l'oiseau instancié
    def print_status(self):
        print('-----print_Appelez la méthode d'état.-----')
        print(f'{self.color}C'est un oiseau coloré.')


#Spécifiez le nom et la couleur de l'oiseau lors de l'instanciation et attribuez-le à une variable appelée chi
chi = Bird('Chitti', 'thé')

#Appelez la méthode de vol d'un objet de type Bird
chi.flying(15)

#Impression d'objet de type oiseau_Appelez la méthode d'état
chi.print_status()

[Résultat de l'exécution] </ font> ----- Appelez le constructeur dès que vous l'instanciez. ----- ----- Appelez la méthode de vol. ----- Bass Bass et Chitchi volent dans le ciel. Voler à une hauteur de 15m. ----- Appelez la méthode print_status. ----- C'est un oiseau brun.

Tout d'abord, passez par le traitement de la classe (Bird),

chi = Bird('Chitti', 'thé')

Est instancié par. Cela créera un objet de type Bird avec la valeur chi. En même temps par le constructeur ** "----- Appelez le constructeur dès qu'il est instancié. -----" ** Est sortie, puis les valeurs de ** nom ** et ** couleur ** sont attribuées.

prochain,

chi.flying(15)
chi.print_status()

Appelle le comportement d'un objet de type Bird appelé chi.

Cependant, il est difficile de le faire, alors réfléchissons-y comme suit. Comparons l'objet de type liste avec l'objet de type Bird créé cette fois.

Objet de type liste Objet de type oiseau
Création d'instance ls = [10, 15, 20] chi = Bird('Chitti', 'thé')
Attributs (données) à ce moment 10, 15, 20 'Chitti', 'thé'
Dans l'objet
Exécution d'une méthode 1
ls.count(10)
(Une méthode pour savoir combien de nombres 10 sont)
chi.flying(15)
(Une méthode qui génère une commande de vol et génère également la hauteur)
Dans l'objet
Exécution d'une méthode 2
ls.clear()
(Méthode pour supprimer des éléments dans la liste)
chi.print_status()
(Méthode pour afficher l'état)

Examiner le type

Dans l'exemple ci-dessus, nous avons expliqué que ** chi ** est un objet de type ** Bird **, mais vous pouvez également savoir si c'est vraiment le cas. Cette fois, entrons le code suivant de ** Python Console **.

>>> from chap09.samp09_02_01 import Bird
>>> chi = Bird('Chitti', 'thé')
-----Appelez le constructeur dès que vous l'instanciez.-----
>>> type(chi)
<class 'chap09.samp09_02_01.Bird'>

En effet, il s'est avéré être un objet de type Bird. (Cela peut changer en fonction du dossier enregistré ou du nom du programme, mais il s'agit toujours d'un objet Bird.)

finalement

J'ai expliqué comment instancier à partir d'un dessin de conception appelé une classe. Bien que je n'ai pas expliqué cette fois, il est possible de créer plusieurs instances (≒ objets) à partir d'un dessin de conception.

Cette fois, j'ai assigné la variable instanciée à la variable ** chi **, mais changeons en fait la variable et créons plusieurs oiseaux avec des noms et des couleurs différents.

Pour les objets, cela peut être difficile, mais nous utilisons toujours les méthodes et les fonctions que nous avons utilisées jusqu'à présent. Il sera plus facile à comprendre si vous le comparez avec le tableau ci-dessus.

Retournez à [Lien de la table des matières]

Recommended Posts