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 :

Récupérer valeur d'objet d'une méthode de classe à partir d'une autre classe


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2017
    Messages : 2
    Par défaut Récupérer valeur d'objet d'une méthode de classe à partir d'une autre classe
    Bonsoir,

    Je suis débutant en python et je suis confronté à un problème.

    Dans le cadre d'un exercice PILE et FILE, j'aimerais pouvoir récupérer la valeur d'un objet d'une méthode de classe à partir d'une autre classe.

    Voici mon code:
    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
     
    # Methode pile qui permet de recuperer la derniere valeur qui a été ajoutée
    # et qui permet aussi de l'enlever de la PILE.
    # Les valeurs sont stockées dans une liste.
    class Pile(object):
     
        def __init__(self,taille):
            assert isinstance (taille,int) and taille > 0 
            self.taille = taille
            self.liste=[0]*taille
            self.pointeur=0
            contenu = self.liste
    # Permet de mettre des valeurs
        def push(self,donnee):
            if self.full():
                print ("Votre liste a atteint sa capacité maximal")
            else:
                self.liste[self.pointeur] = donnee
                self.pointeur = self.pointeur + 1
    # Permet d'enlever des valeurs
        def pop(self):
            if self.empty():
                print ("Votre liste est vide")
            else:
                self.pointeur = self.pointeur - 1
                self.liste[self.pointeur] = 0
    # Si notre liste est vide
        def empty(self):
            if self.pointeur == 0:
                return True
            else:
                return False
    # Si notre liste est remplit
        def full(self):
            if self.pointeur == self.taille:
                return True
            else:
                return False
    # C'est une "file d'attente", on recupere l'objet le plus vieux
    # et on l'enlève de la pile pour le mettre dans une nouvelle liste
    class File(Pile):
     
        def __init__(self,taille):
            super(File,self).__init__(taille)
    #--------------------------------------------
        def recupere(self):
            print (Pile.__init__.self.liste)
    # J'effectue un test pour voir s'il affiche la premiere valeur de la
    # liste de Pile mais je n'y arrive pas.
    #--------------------------------------------
     
    #    def recupere(self):
    #        print (self.list[0])
     
     
    if __name__=="__main__":
        r1= Pile(3)
        print (r1.liste)
        r1.push(3)
        r1.push(6)
        print (r1.liste)
        r2 = File(3)
        print (r2.liste)
        r2.recupere()
    Merci de votre aide.

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur banc de test
    Inscrit en
    Mai 2014
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur banc de test
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2014
    Messages : 199
    Par défaut
    Bonsoir,

    Il y a une petite confusion entre classe et instance de classe.

    Appeler Pile au lieu de self va appeler les attributs définies initialement par "class Pile(object):" plutôt que d'appeler les ceux de l'instance.
    En dehors de la classe: r1.method ou r2.method
    Dans l'instance de la classe : self.method

    De plus l'instance va rajouter automatiquement l'attribut self lors de l'appel d'une méthode.

    self.liste fera l'affaire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    def recupere(self):
            print(self.liste)

  3. #3
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2017
    Messages : 2
    Par défaut
    Bonsoir YCL-,

    En ayant effectuer votre proposition de correction, cela affiche mes valeurs de la liste FILE au lieu de la liste PILE.
    C'est ce que j'avais effectuer précédemment pour pouvoir obtenir les valeurs de la liste PILE à partir de la liste FILE.

  4. #4
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    Tu n'as qu'une seule liste, lorsque tu fais "print (self.liste[0])" dans la classe File c'est la liste créée dans la classe Pile.

    Mais ce n'est pas la liste de r1 qui contient 3 et 6, r2 ignore tout de r1

    Avec la correction proposée par YCL-1, ton code se comporte comme attendu:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    if __name__=="__main__":
        r1= Pile(3)
        print (r1.liste)    #-> [0, 0, 0]
        r1.push(3)          
        r1.push(6)  
        print (r1.liste)    #-> [3, 6, 0]
        r2 = File(3)
        print (r2.liste)    #-> [0, 0, 0]
        r2.recupere()       #-> 0

Discussions similaires

  1. Réponses: 2
    Dernier message: 29/10/2013, 12h19
  2. Réponses: 3
    Dernier message: 14/08/2012, 10h24
  3. MVVM : Appeler une méthode dans Window à partir d'une vue
    Par tom741 dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 09/02/2010, 12h24
  4. Réponses: 4
    Dernier message: 23/12/2008, 12h04
  5. Réponses: 5
    Dernier message: 14/12/2007, 15h51

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