• # Prendre le problème à l'envers

    Posté par . En réponse au message Ajouter des méthodes à une instance de classe, après sa création. Évalué à 7.

    Salut,

    Même en ayant l'habitude des langages (pré-)compilés où ce genre de manip' est impossible, ajouter dynamiquement des méthodes à une classe est déjà douteux, mais les ajouter à une instance précise est encore plus tordu. Pourtant, l'exercice aurait pu être intéressant en soi...

    Mais dans le cas qui te concerne aujourd'hui, c'est un simple problème de conception objet : il faut définir une classe Véhicule, puis deux classes Voitures et Moto qui dérivent toutes les deux de la classe véhicule.

    class Vehicule:
     def tourner(self):
     print("Vehicule qui tourne")
    class Moto(Vehicule):
     def tourner(self):
     print("Moto qui tourne")
    class Voiture(Vehicule):
     def tourner(self):
     print("Voiture qui tourne")
    class Autogyre(Vehicule):
     def voler(self):
     print("Autogyre qui vole");
    h = Vehicule()
    m = Moto()
    v = Voiture()
    a = Autogyre()
    h.tourner()
    m.tourner()
    v.tourner()
    a.tourner()
    

    Ce qui donne :

    Vehicule qui tourne
    Moto qui tourne
    Voiture qui tourne
    Vehicule qui tourne
    

    Dans cet exemple, les classes Voiture et Moto dérivent de Véhicule, mais redéfinissent la méthode « tourner », et c'est cette dernière version qui est donc appelée. En revanche, la classe Autogyre dérive également de Véhicule mais définit une autre méthode sans redéfinir « tourner ». C'est donc la version par défaut héritée de « Véhicule » qui est appelée, et c'est pourquoi on obtient « Véhicule qui tourne » et non « Autogyre qui tourne ».