Héritage Python

Héritage Python

L'héritage nous permet de définir une classe qui hérite de toutes les méthodes et attributs d'une autre classe.

Classe parenteEst une classe héritée, également appelée classe de base.

Sous-classeEst une classe dérivée d'une autre classe, également appelée classe dérivée.

Créer une classe parente

Toute classe peut être une classe parente, donc la syntaxe est la même que pour créer toute autre classe :

Instance

Créer une classe nommée Personne, contenant les attributs firstname et lastname ainsi que la méthode printname :

class Person:
  def __init__(self, fname, lname):
    self.firstname = fname
    self.lastname = lname
  def printname(self):
    print(self.firstname, self.lastname)
# Utiliser Person pour créer un objet et exécuter la méthode printname :
x = Person("Bill", "Gates")
x.printname()

Exécuter l'exemple

Créer une sous-classe

Pour créer une classe héritant des fonctionnalités d'autres classes, envoyez le parent en tant que paramètre lors de la création de la sous-classe :

Instance

Créer une classe nommée Student qui héritera des attributs et des méthodes de la classe Person :

class Student(Person):
  pass

Remarque :Si vous ne souhaitez pas ajouter d'autres attributs ou méthodes à cette classe, utilisez pass Cléword.

Maintenant, la classe Student possède les mêmes attributs et méthodes que la classe Person.

Instance

Créer un objet de la classe Student et exécuter la méthode printname :

x = Student("Elon", "Musk")
x.printname()

Exécuter l'exemple

Ajouter __init__()

Jusqu'à présent, nous avons créé une sous-classe qui hérite des attributs et des méthodes de la classe parent.

Nous voulons ajouter __init__() Ajouter une fonction à la sous-classe (pas pass Cléword).

Remarque :Chaque fois que vous utilisez la classe pour créer un nouveau objet, la fonction __init__() est appelée automatiquement.

Instance

Ajouter une fonction __init__() pour la classe Student :

class Student(Person):
  def __init__(self, fname, lname):
    # Ajouter des attributs, etc.

Lorsque vous ajoutez une fonction __init__(), la sous-classe ne héritera plus de la fonction __init__() du parent.

Remarque :La fonction __init__() de l'enfant couvre l'héritage de la fonction __init__() du parent.

Pour conserver l'héritage de la fonction __init__() du parent, ajoutez l'appel à la fonction __init__() du parent :

Instance

class Student(Person):
  def __init__(self, fname, lname):
    Person.__init__(self, fname, lname)

Exécuter l'exemple

Maintenant que nous avons ajouté avec succès la fonction __init__() et conservé l'héritage de la classe parent, nous sommes prêts à ajouter des fonctionnalités à la fonction __init__().

L'utilisation de la fonction super()

Python a également super() La fonction, cela permettra à la sous-classe d'hériter de toutes les méthodes et attributs de la classe parent :

Instance

class Student(Person):
  def __init__(self, fname, lname):
    super().__init__(fname, lname)

Exécuter l'exemple

En utilisant super() La fonction, vous n'avez pas besoin d'utiliser le nom de l'élément parent, elle héritera automatiquement des méthodes et des attributs de l'élément parent.

Ajouter des attributs

Instance

Ajouter un nom graduationyear ajouter les attributs à Student Classe :

class Student(Person):
  def __init__(self, fname, lname):
    super().__init__(fname, lname)
    self.graduationyear = 2019

Exécuter l'exemple

Dans cet exemple, 2019 devrait être une variable et être passée à la classe Student lors de la création de l'objet student. Pour cela, ajoutez un autre paramètre à la fonction __init__() :

Instance

Ajouter year Paramètres, et passez la bonne année lors de la création de l'objet :

class Student(Person):
  def __init__(self, fname, lname, year) :
    super().__init__(fname, lname)
    self.graduationyear = year
x = Student("Elon", "Musk", 2019)

Exécuter l'exemple

Ajouter une méthode

Instance

Ajouter un nom welcome Ajouter la méthode à la classe Student :

class Student(Person):
  def __init__(self, fname, lname, year):
    super().__init__(fname, lname)
    self.graduationyear = year
  def welcome(self):
    print("Bienvenue", self.firstname, self.lastname, "à la classe de", self.graduationyear)

Exécuter l'exemple

Astuce :Si vous ajoutez une méthode portant le même nom que la méthode de la classe parente dans la sous-classe, vous couvrirez l'héritage de la méthode parente.