Héritage

L'héritage est un concept puissant en programmation orientée objet. C'est un moyen d'organiser le code et il est particulièrement utile lorsque vous avez plusieurs classes liées entre elles. L'héritage permet à une classe d'hériter de toutes les méthodes et propriétés d'une autre classe, ce qui favorise la réutilisation du code et les relations logiques entre les classes.
Pour illustrer l'utilisation de l'héritage en Python, prenons l'exemple d'un zoo. Un zoo possède divers animaux comme des chiens, des chats et des oiseaux. Bien que ces animaux aient leurs comportements uniques, ils partagent également certaines caractéristiques communes. Dans un tel scénario, l'héritage peut nous aider à éviter la répétition de code et à rendre le code plus organisé. Voyons comment :
class Animal:                                         # Définition de la classe de base Animal
    def __init__(self, name, age):                    # Méthode constructeur avec les paramètres name et age
        self.name = name                              # Attribution de l'attribut name
        self.age = age                                # Attribution de l'attribut age

    def eat(self):                                    # Méthode commune eat
        return f'{self.name} is eating.'

    def make_sound(self):                             # Méthode commune make_sound
        return f'{self.name} makes a sound.'

class Dog(Animal):                                    # Définition de la classe Dog qui hérite de Animal
    def make_sound(self):                             # Redéfinition de la méthode make_sound
        return f'{self.name} barks.'

class Cat(Animal):                                    # Définition de la classe Cat qui hérite de Animal
    def make_sound(self):                             # Redéfinition de la méthode make_sound
        return f'{self.name} meows.'

class Bird(Animal):                                   # Définition de la classe Bird qui hérite de Animal
    def eat(self):                                    # Redéfinition de la méthode eat pour Bird
        return f'{self.name} is pecking at its food.'

    def make_sound(self):                             # Redéfinition de la méthode make_sound
        return f'{self.name} chirps.'

# La méthode __init__ est héritée de Animal
# mais vous pouvez avoir __init__ pour chacune des classes héritées également
dog = Dog('Rex', 5)                                   # Création d'une instance de Dog
cat = Cat('Whiskers', 3)                              # Création d'une instance de Cat
bird = Bird('Tweety', 2)                              # Création d'une instance de Bird

for animal in [dog, cat, bird]:                       # Itération sur les instances
    print(animal.eat())                               # Appel de la méthode eat héritée ou redéfinie
    print(animal.make_sound())                        # Appel de la méthode make_sound redéfinie
    print('-----')
La sortie serait :
Rex is eating.
Rex barks.
-----
Whiskers is eating.
Whiskers meows.
-----
Tweety is pecking at its food.
Tweety chirps.
-----
Dans le code ci-dessus, Animal est la classe parente, tandis que Dog, Cat et Bird sont des classes enfants. Les classes enfants héritent de toutes les méthodes de la classe Animal. Cependant, chaque classe enfant redéfinit la méthode make_sound car le son produit par chaque animal est unique. Nous redéfinissons également la méthode eat dans la classe Bird parce que la façon de manger de l'oiseau est différente du comportement général défini dans la classe Animal.
Cette approche nous permet de représenter plus efficacement les objets du monde réel et leurs relations, créant ainsi un code clair, concis et facile à maintenir. Ainsi, l'héritage nous permet de bénéficier de la réutilisation du code et de la réduction de la complexité.

Challenge : Classes Person & Employee

Vous êtes tenu de créer deux classes Person et Employee.
La classe Person doit contenir les attributs suivants :
  • name : Une chaîne de caractères représentant le nom de la personne.
  • age : Un entier représentant l'âge de la personne.
La classe Person doit également contenir la méthode suivante :
  • introduce_yourself() : Cette méthode affiche une chaîne au format suivant : "My name is {name} and I am {age} years old."

La classe Employee doit hériter de la classe Person et ajouter l'attribut suivant :
  • job_title : Une chaîne de caractères représentant le titre du poste de la personne.
La classe Employee doit également redéfinir la méthode suivante :
  • introduce_yourself() : Cette méthode affiche une chaîne au format suivant : "My name is {name}, I am {age} years old, and my job title is {job_title}."
Entrée
Sortie
alice=Person('Alice', 25); alice.introduce_yourself(); bob=Employee('Bob', 30, 'Engineer'); bob.introduce_yourself();
My name is Alice and I am 25 years old. My name is Bob, I am 30 years old, and my job title is Engineer.
 

Constraints

Time limit: 2 seconds

Memory limit: 512 MB

Output limit: 1 MB

To check your solution you need to sign in
Sign in to continue