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 :

Virtuel et Heritage


Sujet :

Python

  1. #1
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    258
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 258
    Par défaut Virtuel et Heritage
    Bonjour,
    Je souhaiterai creer en Python une classe mere et obliger toutes classes filles a implementer des fonctions bien specifiques.

    Je ne trouve cependant aucun moyen de le faire !!

    quelqu'un a une idee
    merci

  2. #2
    Membre éprouvé
    Inscrit en
    Novembre 2007
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 129
    Par défaut
    En python il n'y pas de mot clee pour definire une interface ou une methode virtuel/virtuelle pure.

    Python n'est pas un langage compilé ce qui nous donne beaucoup de liberté concernant la manipulation d'objets

    Une solution consiste à utiliser les exceptions pour creer une classe de base.
    Voici la un exemple que j'ai trouvé ...

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    #voici l'interfcae
    class MonInterface:
        '''Un exemple d'interface en python '''
        def __init__(self):
            if self.__class__ is AbstractBase:
                raise NotImplementedError
     
        def virtuellePure1(self):
            raise NotImplementedError
     
        def virtuellePure2(self):
            raise NotImplementedError
     
    #classe fille qui n'implemente pas l'uine des methodes donc ca ne marche ra pas
    class Fille1(MonInterface):
        def __init__(self):
            print "Instanciation de Fille1"
        def virtuellePure1(self):
             print "virtuellePure1"
     
    #classe fille qui marche
    class Fille2(MonInterface):
        def __init__(self):
            print "Instanciation de Fille1"
     
        def virtuellePure1(self):
             print "virtuellePure1"
     
        def virtuellePure2(self):
             print "virtuellePure1"
     
    #ca doit marcher
    test1 = Fille2()
    test1.virtuellePure1()
    test1.virtuellePure2()
     
    #on poura instancier Fille1 et appeler virtuellePure1 mais pas virtuellePure2
    test2 = Fille1()
    test2.virtuellePure1()
    test2.virtuellePure2()
     
    #ca ne marchera pas parce qu'il n'est pas possible d'instancier une interface
    test3 = MonInterface()
    test3.virtuellePure1()
    test3.virtuellePure2()

  3. #3
    Membre Expert
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Par défaut
    Il y a également moyen d'empêcher l'instanciation d'une classe qui n'a pas redéfini toutes les méthodes abstraites (= virtuelles pures) dont elle hérite, mais c'est plus compliqué; voir ici: http://aspn.activestate.com/ASPN/Coo.../Recipe/266468.

Discussions similaires

  1. heritage virtuel en pratique
    Par Elay dans le forum C++
    Réponses: 7
    Dernier message: 11/12/2009, 11h18
  2. Heritage non virtuel.
    Par ElPedro dans le forum Langage
    Réponses: 20
    Dernier message: 15/11/2009, 11h39
  3. heritage multiple virtuel et warning 4250
    Par babar63 dans le forum C++
    Réponses: 3
    Dernier message: 10/03/2009, 19h49
  4. Problème avec l'heritage virtuel
    Par Spandelles dans le forum Débuter
    Réponses: 4
    Dernier message: 05/12/2008, 11h40
  5. Réponses: 9
    Dernier message: 15/02/2007, 14h05

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