Partage
  • Partager sur Facebook
  • Partager sur Twitter

Récupérer les variables des classes parents.

Récupérer ou modifier..

Sujet résolu
    7 avril 2015 à 6:11:37

    Bonjour à vous,

    J'ai toujours ce même problème de structure. J'ai l'impression que je me répètes souvent dans mes codes. J'ai donc essayer de me pratiquer.

    Je suis capable d'aller chercher les méthodes des classes parents. Mais pas leur variables.

    class A(object):
        var1 = '1' # Default
        var2 = '2' # Default
        def __init__(self):
            self.a = 'a'
            #A.a = 'a'
            print 'Class A'
    
        def methodA(self):
            print 'okA'
            print self.a
    
    
    class B(A):
        def __init__(self):
            self.b = 'b'
            print 'Class B'
    
        def methodB(self):
            print 'okB'
    
    class C(A):
        def __init__(self):
            self.c = 'c'
            print 'Class C'
            
        def methodC(self):
            print 'okC'
    
    class D(B, C):
        def __init__(self):
            self.d = 'd'
            print 'Class D'
    
        def methodD(self):
            print 'okD'
    
        def callA(self):
            self.a = 'a2'
            print self.a
            #print A.a
    

    Peut-on modifier ces variables? self.a, self.b ...

    Dois-je prendre exemples sur var1 et var2 ?

    Lorsque j'appelle la méthode callA, il me retourne self.a = 'a2', mais il ne la modifie pas... Donc je ne voit pas self.a de class A.. J'ai plutôt créer une autre variable self.a dans class D....

    Comment modifier les variables des classes parents?

    Suis-je proche d'une solution?

    Merci d'avance.

    • Partager sur Facebook
    • Partager sur Twitter
      7 avril 2015 à 6:21:58

      Tu oublies d'appeler __init__ de la classe Parent, donc elle ne s'exécute pas.

      La bonne manière de faire est d'appeler super(D, self).__init__() depuis la méthode init de la classe D sous Python 2. Pour Python 3, c'est encore plus simple: super().__init__()

      • Partager sur Facebook
      • Partager sur Twitter
        7 avril 2015 à 9:26:39

        Enfin y'a quand même un problème de conception très clair puisque c'est une architecture en diamant :

            A
            |
        +---+---+
        |       |
        B       C
        |       |
        +---+---+
            |
            D
        

        Si tu penses avoir besoin de l'héritage multiple, alors c'est certainement une mauvaise idée. Si tu SAIS que t'as besoin de l'héritage multiple, alors c'est probablement la seule solution à ton problème.

        -
        Edité par nohar 7 avril 2015 à 9:27:08

        • Partager sur Facebook
        • Partager sur Twitter
        Zeste de Savoir, le site qui en a dans le citron !
        Anonyme
          7 avril 2015 à 13:22:48

          Si tu penses avoir besoin de l'héritage multiple, alors c'est certainement une mauvaise idée. Si tu SAIS que t'as besoin de l'héritage multiple, alors c'est probablement la seule solution à ton problème.

          C'est pas bien les mixins :o ? J'ai toujours pensé que ça apportait une flexibilité à l'utilisateur :(

          • Partager sur Facebook
          • Partager sur Twitter
            7 avril 2015 à 13:59:12

            AlphaZeta a écrit:

            Si tu penses avoir besoin de l'héritage multiple, alors c'est certainement une mauvaise idée. Si tu SAIS que t'as besoin de l'héritage multiple, alors c'est probablement la seule solution à ton problème.

            C'est pas bien les mixins :o ? J'ai toujours pensé que ça apportait une flexibilité à l'utilisateur :(

            Les mixins, oui (c'est plus ou moins un pattern Strategy par héritage), les ABC aussi (pour t'assurer que la classe de l'utilisateur implémente tous les comportements requis), mais les arbres d'héritage multiple "bête et méchant", ça apporte surtout des designs qui se cassent la figure au bout de 3 ou 4 itérations.

            En gros, l'héritage multiple, c'est très bien quand on n'arrive pas à un truc en diamant comme ça : une classe qui hérite de deux classes filles de la même mère, à moins que la classe mère en question soit object, c'est de l'inceste.

            -
            Edité par nohar 7 avril 2015 à 14:02:46

            • Partager sur Facebook
            • Partager sur Twitter
            Zeste de Savoir, le site qui en a dans le citron !

            Récupérer les variables des classes parents.

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown