[Hikari-Python] Chapitre 09-03 Classe (Héritage)

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

[Python] Chapitre 09-03 Héritage

Dans la section précédente, nous avons mentionné la création d'objets par instanciation à partir d'un dessin de conception appelé classe. Le diagramme de classes de l'objet de type Bird était le suivant. image.png

Au fait, en faisant attention à la méthode, il n'y a que deux états, fly () et print_status (). Les oiseaux chantent en fait, alors j'aimerais envisager de créer cette méthode appelée pleurer cette fois.

Cependant, il existe de nombreuses façons différentes de chanter les oiseaux, comme "Crow" pour Crow, "Chun Chun" pour Sparrow et Pegion. Il existe différents types tels que "Kuruppo". Dans ce cas, vous devrez créer une classe pour chaque type d'oiseau comme suit. image.png

Cependant, si vous regardez le diagramme de classes ci-dessus, ils ne diffèrent tous que dans la partie méthode ** cry () **, et les autres parties sont les mêmes dans tous les diagrammes de classes.

En me concentrant là-dessus, j'aimerais réfléchir à la façon de ne programmer que la différence.

Fonction d'héritage

Vous pouvez profiter d'une classe existante et créer une classe avec des modifications mineures. ** L'héritage ** peut être utilisé à ce moment.

En utilisant la fonction d'héritage, vous pouvez hériter des attributs et des méthodes d'une classe existante et créer une classe simplement en écrivant les attributs et les méthodes uniquement pour les différences.

Il est comme suit lorsqu'il est exprimé dans un diagramme de classes. image.png

On peut voir que la classe Crow, la classe Pegion et la classe Sparrow héritent de la classe Bird. Comme vous pouvez le voir sur cette figure, il vous suffit de spécifier la classe Crow, la classe Pegion et la classe Sparrow ** cry () ** séparément de la classe Bird. De cette façon, vous n'avez pas à réécrire le programme un par un, ajoutez simplement les différences requises.

Termes souvent utilisés en héritage

Dans l'exemple ci-dessus, nous avons créé la classe Crow, la classe Pegion et la classe Sparrow basées sur la classe Bird. À ce stade, la classe d'origine (classe Bird cette fois) est appelée ** super classe **, et les classes héritées (classe Crow, Pegion, Sparrow cette fois) sont appelées ** sous-classe **.

Ensuite, concentrons-nous sur la relation entre les superclasses et les sous-classes. On peut dire que la relation entre Bird et Crow est «Crow is Bird». Noté en anglais, c'est ** "Crow is a Bird" **. Ces relations d'héritage sont parfois appelées ** relations is_a **.

De plus, du point de vue de Bird (super classe), il est ** spécialisé ** à Crow (sous-classe), et du point de vue de Crow (sous-classe), il est ** généralisé à Bird (super classe) **. Il est parfois exprimé comme étant. image.png

Implémenter des superclasses et des sous-classes

Écrivons réellement le programme. Premièrement, le programme hérité est généralement décrit comme suit.

nom de la super classe:
Attributs de super classe
Traitement par la méthode de la super classe

nom de sous-classe de classe(Nom de la super classe):
Attributs de sous-classe
Traitement par les méthodes de sous-classe

Cependant, si vous écrivez tout Crow, Pegion et Sparrow, ce sera difficile à voir, donc cette fois j'écrirai une sous-classe de Crow uniquement. Écrivez le code suivant dans samp09_03_01.py </ font> dans chap09 </ font>.

.samp09_03_01.py


#Description de la super classe
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 fly(self, m):
        print('-----Appelez la méthode fly.-----')
        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é.')


#Description de la sous-classe
class Crow(Bird):
    def cry(self):
        print('-----Appelez la méthode cry dans la sous-classe.-----')
        print('Ça crie.')


#Instancier une sous-classe Crow
kur = Crow('Kurosuke', 'noir')

#Appelez la méthode cry dans la sous-classe
kur.cry()

#Appelez la méthode fly dans la superclasse
kur.fly(10)

#Imprimez en super classe_Appelez la méthode d'état
kur.print_status()

[Résultat de l'exécution] </ font> ----- Appelez le constructeur dès que vous l'instanciez. ----- ----- Appelez la méthode cry dans la sous-classe. ----- Ça crie. ----- Appelez la méthode fly. ----- Bassaba et Kurosuke volent dans le ciel. Voler à une hauteur de 10 m. ----- Appelez la méthode print_status. ----- C'est un oiseau noir.

Tout d'abord, nous instancions un corbeau (Crow) à partir d'une sous-classe et l'attribuons à ** kur **. Ensuite, vous pouvez voir que la méthode cry dans la sous-classe ** Crow ** pleure.

Et notez que vous pouvez également appeler les méthodes de la superclasse ** Bird **. En effet, la classe ** Crow ** hérite de la classe ** Bird **, vous pouvez donc également appeler les méthodes de la classe ** Bird **.

finalement

L'héritage apparaît souvent dans diverses bibliothèques, mais c'est un concept qui apparaît également dans d'autres langages tels que Java et C ++. Les termes qui apparaissent souvent dans l'héritage sont des termes qui apparaissent toujours dans le champ orienté objet dans l'examen d'ingénieur en information de base, alors maintenons-les enfoncés.

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

Recommended Posts