Archives Wild Code School
Python

4.8 Python - Inheritance

Quête 25 sur 66 · 3 images archivées

Le récit

Cette quête parle de l'héritage. C'est une notion fondamentale en programmation orientée objet. Elle permet de créer une classe dite fille qui va hériter des méthodes et des attributs de la classe mère.

En tant que data analyst, il vous sera très rarement nécessaire de créer des classes en partant de zéro, soyez rassurés. Cependant, il peut être pratique de créer une classe fille qui hérite d'une classe mère que vous n'avez pas développée, et à laquelle vous ajoutez vos propres méthodes et attributs. Ca permet de gagner beaucoup de temps.

Non tu n'as pas gagné de l'argent de la soeur de la mère du fils du neveu de ton arrière grand mère. Il s'agit d'un concept fondamental de la POO. Nous allons le découvrir dans cette quête en reprenons ton objet data analyst.

Objectifs

  • Comprendre les concept d'héritage et d'encapsulation
  • Implémenter les concepts d'héritage et d'encapsulation

De quoi on hérite ? Qu'est ce qu'on encapsule ?

L'héritage est le concept qui permet à une classe donnée d'hériter des méthodes d'une autre classe. Comme le montre l'image ci-dessus, les objets herbivore, carnivore et omnivore, hériteront des méthodes de l'objet Animal. Quelles méthodes ? Par exemple celles-ci :

  • Respirer

  • Se reproduire

  • Se déplacer

  • Etc

Mais pourquoi faire de l'héritage ? Pourquoi par exemple, ne pas juste créer un objet carnivore avec ces méthodes caractéristique, ensuite un objet herbivore avec les mêmes méthodes, et enfin un objet omnivore avec les méthodes ?

Déjà, comme tu l'as senti avec la lourdeur de la question, il y a un aspect redondant pas très apprécié des développeurs en général. Il est de loin préférable de structurer son programme par groupe d'entité pour minimiser la redondance afin de plus facilement maintenir ton programme, surtout quand il grossira. De plus un programme bien structuré gagne en robustesse. Il y a bien moins de chance que tu attribues à un carnivore la méthode photosynthèse par exemple ?

De plus une classe fille peut légèrement différer de sa classe mère. L'encapsulation associé à l'héritage permet de filtrer les méthodes dont la classe fille va hériter. L'encapsulation permet de filtrer ce à quoi on a accès sur un objet. C'est à dire à quelle variable, méthode, on peut avoir accès à l'extérieur de l'objet. Bien utilisé elle permet de ne pas modifier (casser) l'objet involentairement.

Il y a encore d'autres avantages de l'héritage qui en font un must to know en programmation orientée objet. D'ailleurs, toutes les classes que tu utilises héritent d'un objet.

↗
Différence entre Héritage et Composition
waytolearnx.com
↗
Héritage - Comment ça marche
commentcamarche.net

Implémenter l'héritage et l'encapsulation

Implémenter l'héritage en Python est très simple. Déjà la syntaxe : class NouvelleClasse(ClasseMere):. Pour accéder aux méthodes de la classe mère on fait : classeMere.methode(self).

Le récit

Pour information, Python peut pratiquer l'héritage multiple. C'est plutôt une exception (la plupart des langages ne le permettent pas), et pas forcément une bonne pratique (comme le montre des discussions sur des forums comme celui-ci, ou encore celui-là). Comme son nom l'indique, avec l'héritage mutliple, une classe fille peut hériter de plusieurs classes mères en même temps. Mais attention aux risques d'incohérences si des attributs et des méthodes sont nommés de la même manière dans les 2 classes mères...

L'encapsulation est assez simple à mettre en oeuvre. Tu en apprendras davantage dans les ressources ci-dessous.

↗
Python encapsulation- ProgrammingKnowledge
youtube.com
↗
Les classes et l’héritage en Python
waytolearnx.com
↗
Classes et objets
courspython.com

Challenge

On pratique

Dans ce challenge tu vas reprendre ton objet data analyst précédemment crée. Tu lui feras en plus hériter d'une classe mère "statisticien".

La classe mère statisticien aura 3 attributs : Chacun d'entre eux peut avoir des valeurs entières (integer) allant de 0 à 100 :

  • logique
  • memoire
  • creativite

La classe mère aura pour méthodes :

  • les fonctions de la quête "Au secours des statisticiens - partie 2"
  • initialisation() : une méthode qui attribue aléatoirement une valeur aux 3 attributs en faisant en sorte que la somme totale soit comprise entre 111 et 177, les valeurs paires et multiples de 5 exclues. Cette méthode sera lancée par le constructeur de l'objet.

Initialise un notebook sur Google colab. Tu coderas tes classes mères et filles dans ce notebook, puis tu instancieras un objet de la classe fille.

Une fois réalisé, poste le lien vers ton notebook en commentaire pour validation, sans oublier de le rendre accessible en lecture pour toute personne disposant du lien.

Le récit

Facultatif - Pour ceux qui voudraient tenter un héritage multiple - Attention, comme précisé plus haut, c'est plutôt risqué, et pas forcément une bonne pratique.

Vous pouvez créer une seconde classe mère "développeur".

En effet, "a Data Analyst is a Person who is better at statistics than any software engineer and better at software engineering than any statistician".

Cette classe mère développeur aura pour attributs des valeurs allant de 0 à 10 :

  • frond_end : float
  • back_end : float
  • full_stack : int
  • gestion_de_projet : float

Cette classe mère développeur aura pour méthodes :

  • initialisation() : Attribue aléatoirement une valeur aux attributs sauf full_stack. Méthode lancée par le constructeur de l'objet.
  • vrai_full_stack() : Méthode qui attribue une valeur à l'attribut full-stack. Elle attribue une valeur aléatoire qui est égale à la valeur entière de la moyenne entre front-end et back-end, ou à l'entier précédent, ou à l'entier suivant, en respectant la plage de valeur de 0 à 10.

Tu devras encapsuler toutes les méthodes et attributs des classes mères.

Critères de validation

  • Le notebook est accessible en lecture pour toutes personnes disposant du lien
  • Les classes ont bien été codées et respectent les critères
  • Le code fonctionne correctement (pas de bug)

Ressources partagées sur cette quête