IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

C'est quoi le polymorphisme en python?


Sujet :

Python

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 38
    Points : 43
    Points
    43
    Par défaut C'est quoi le polymorphisme en python?
    Salut à tous !!!

    J'ai commencé la POO en python mais il y a une notion qui m'échappe vraiment.je n'arrive pas à comprendre c'est quoi le Polymorphisme en python.J'ai beaucoup cherché sur google,différents tutoriels etc mais je comprends rien (et pourtant j'ai bien compris la notion d'héritage voir héritage multiple) mais avec le polymorphisme je suis mort.

    J'ai trouve des tutoriels qui parlent des polymorphismes d'autre parlent "surcharge des méthodes " donc je suis perdu mes amis.

    S'il vous s'il y a quelqu'un qui peux m'expliquer bien ,ces trucs je serais ravi et reconnaissant.

    Merci d'avance.

  2. #2
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2011
    Messages : 180
    Points : 321
    Points
    321
    Par défaut
    Bonjour

    En poo le polymorphisme consiste à offrir une interface commune à des objets de différent type.

    En Python, nul besoin de créer cette interface. Imaginons que tu crée une classe dont tu souhaite pouvoir afficher le contenu par un simple print.
    En cela tu n'a besoin que d'ajouter dans ta classe la méthode spéciale __str__(self) dans laquelle tu retourne une chaîne représentant son contenu.
    Cela fait coin coin, cela flotte sur l'eau : c'est un canard !

    En outre toute classe C héritant d'une classe B qui hérite elle-même d'une classe A, se comporte au moins comme une classe B et au moins comme
    une classe A. C'est une autre façon de réaliser le polymorphisme.

  3. #3
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 684
    Points : 30 973
    Points
    30 973
    Billets dans le blog
    1
    Par défaut
    Bonjour

    Le polymorphisme c'est "pouvoir appeler la même méthode" sur plusieurs objets différents sans se préoccuper de comment se comportera l'objet dans ce cas.

    En Python, ça se fait en redéfinissant la méthode dans la fille quand c'est nécessaire. Et dans ce cas, quand c'est nécessaire d'implémenter un héritage, il faut alors explicitemet le demander.

    Exemple
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    >>> class base(object):
    	def affiche(self):
    		print "je suis la base"
     
    >>> class filleA(base):
    	def affiche(self):
    		base.affiche(self)
    		print "filleA"
     
    >>> class filleB(base):
    	def affiche(self):
    		print "filleB"
     
    >>> class filleC(base):
    	pass
     
    >>> a=filleA()
    >>> a.affiche()
    je suis la base
    filleA
     
    >>> b=filleB()
    >>> b.affiche()
    filleB
     
    >>> c=filleC()
    >>> c.affiche()
    je suis la base

    Les 3 classes filles possèdent toutes 3 la fonction "affiche" récupérée par défaut. Toutefois la première ayant besoin d'avoir le comportement d'origine plus le sien propre est alors obligée d'appeler la fonction de la classe mère de façon explicite. Et la seconde, elle, n'ayant pas besoin de la fonction d'origine, se contente de redéfinir un autre comportement totalement différent.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 281
    Points : 36 768
    Points
    36 768
    Par défaut
    Citation Envoyé par Aboubakar Ahamda Voir le message
    J'ai trouve des tutoriels qui parlent des polymorphismes d'autre parlent "surcharge des méthodes " donc je suis perdu mes amis.
    En fait, le "polymorphisme" en POO a de nombreuses variantes. Pire, Python étant un langage dynamique, il a un polymorphisme particulier appelé duck typing.

    Effectivement, il y a de quoi s'y perdre, mais çà ne devrait pas trop vous gêner pour coder.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre chevronné
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2013
    Messages
    485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2013
    Messages : 485
    Points : 2 151
    Points
    2 151
    Par défaut
    Pour compléter ce qui a été dit sur le polymorphisme (qui n'est pas propre à Python), je pourrais faire l'exemple des animaux.
    C'est parlant parce que c'est assez concret.

    un chien remue la queue quand il est content, un chat ronronne et un canari chante.

    Supposons que l'on avait 3 classes qui reprend ces 3 animaux.
    Sans héritage/polymorphisme, on aurait quelque chose comme cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    class Dog:
     
        def move_tail(self):
            # move its tail
            ....
     
    class Cat:
     
        def purr(self)
            # purr
            ....
     
    class Canary:
     
        def song(self)
            # song
            ....
    Maintenant, tu manipules tes animaux et sur l'un d'entre eux, tu veux lui faire faire l'action d'etre content.
    Mais comme il ne font pas l'action de la même façon, tu dois avant analyser le type d'animaux que tu as:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    my_pet = get_current_pet()
    if isinstance(my_pet,Dog):
         my_pet.move_tail()
    elif isinstance(my_pet,Cat):
         my_pet.purr()
    elif isinstance(my_pet,Canary):
         my_pet.song()
    else:
         raise Exception('???')
    On vois alors, que la gestion d'une simple action deviens assez compliquer.
    Et si on veux rajouter un hamster, faudra rajouter une nouvelle condition.

    Maintenant, si on utilisait l'heritage/polymorphisme en introduisant la notion d'une classe mère:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    class Animal
     
        def be_happy(self):
              raise Exception('not implemented')
     
    class Dog(Animal):
     
        def be_happy(self):
            # move its tail
            ....
     
    class Cat(Animal):
     
        def be_happy(self):
            # purr
            ....
     
    class Canary(Animal):
     
        def be_happy(self):
            # song
            ....
    On ne cherche plus à décrire chaque particularité de chaque animaux, mais de les rassembler dans une notion général.
    L'appel à l'action comme précédemment se résumera alors à:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    my_pet = get_current_pet()
    my_pet.be_happy()
    Et on vois aussi, que l'ajout de l'animal hamster sera aussi grandement simplifier.

    Voilà, une illustration de ce que peux t'apporter l’héritage et le polymorphisme.

  6. #6
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 811
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 811
    Points : 7 096
    Points
    7 096
    Par défaut
    Un exemple très simple en python pour exprimer le polymorphisme, c'est la fonction add (ajouter), qui fonctionne avec beaucoup de paramètres de type différent

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    def add(param1, param2):
        return param1 + param2
    Vous pourrez faire les tests suivants:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    print(add(12, 5)) # somme
    print(add('b', 'onjour')) # concaténation
    print(add(3.8, 9)) # somme
    print(add([4, 9], [3, 6, 12.5])) # étendre
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

Discussions similaires

  1. python ? c'est quoi
    Par toppsir dans le forum Général Python
    Réponses: 23
    Dernier message: 20/12/2007, 10h56
  2. [sbadecoder a dit].. C'est quoi pour vous un beau programme?
    Par seb.49 dans le forum Langages de programmation
    Réponses: 14
    Dernier message: 13/02/2004, 10h41
  3. C'est quoi XMLRAD ?
    Par laffreuxthomas dans le forum XMLRAD
    Réponses: 10
    Dernier message: 09/08/2003, 02h42
  4. C'est quoi "Profile" dans le assign du XMLGram ?
    Par Lux interior dans le forum XMLRAD
    Réponses: 2
    Dernier message: 28/02/2003, 11h37
  5. C'est quoi exactement un générateur d'états
    Par Henry Cesbron Lavau dans le forum Outils de restitution et d'analyse
    Réponses: 0
    Dernier message: 02/04/2002, 19h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo