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 :

Manipuler des listes d'objet ?


Sujet :

Python

  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2002
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 22
    Points : 19
    Points
    19
    Par défaut Manipuler des listes d'objet ?
    Salut, je débute en python et n'ayant jamais fait d'OOP, autant dire que c'est chaud. Je comprends bien la theorie mais de là à l'appliquer ....

    Voila, j'arrive à créer une liste d'instances de la classe SampleClass mais j'ai beau chercher, j'arrive pas à trouver d'exemple de manipulation d'une telle liste.

    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
    class SampleClass :
        #Creation de la classe sample
        def __init__ (self, HoleId, SampleId, Depth, THM):
            #Definition des attributs de chaque instance
            self.HoleId = HoleId
            self.SampleId = SampleId
            self.Depth = Depth
            self.THM = THM
     
    #exemple de creation d'instances samples
    s1 = SampleClass(10,101,1.5,2)
    s2 = SampleClass (10,102,3,3)
    s3 = SampleClass(10,103,4.5,5)
    s4 = SampleClass ( 10,104, 6, 1)
     
    #creation de la liste
    SampleList = []
     
    #je popule la liste avec les samples dans le desordre
    SampleList.append(s4)
    SampleList.append(s1)
    SampleList.append(s3)
    SampleList.append(s2)
    Mes questions seraient :
    - Comment puis je faire pour classer mes samples dans ma liste en fonction de l'attribut "Depth"
    - Comment ensuite aller chercher les valeurs de THM de chaque sample ainsi classés

    Je retourne, mes recherches, merci.

  2. #2
    Expert éminent sénior
    Avatar de Guigui_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2002
    Messages : 1 864
    Points : 10 067
    Points
    10 067
    Par défaut
    pour le tri, tu peux regarder ce post:
    http://www.developpez.net/forums/sho...d.php?t=142377

  3. #3
    Membre à l'essai
    Inscrit en
    Décembre 2002
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 22
    Points : 19
    Points
    19
    Par défaut
    Merci, j'avais déjà lu ce sujet sur le tri des listes insérées.

    Mais ici, c'est une liste d'objets et je n'arrive pas à accéder à leurs attributs, quand je fais un print de ma liste, j'obtiens la liste de mes objets et leur emplacement mémoire :

    [<__main__.SampleClass instance at 0x01166968>, <__main__.SampleClass instance at 0x0116B440>, <__main__.SampleClass instance at 0x011666C0>, <__main__.SampleClass instance at 0x01166760>]

    J'arrive pas à trouver comment accéder à sX.depth dans mon sort SampleList !

  4. #4
    Membre actif
    Avatar de Wormus
    Inscrit en
    Septembre 2005
    Messages
    262
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 262
    Points : 276
    Points
    276
    Par défaut
    Pour avoir accés à tes attribut, il faut que tu crées dans ta classe SampleClass des méthodes qui vont te permettre d'accéder à tes attributs

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Def getDepth(self):
       return Depth
    mais vu que tes attributs sont de toute façon pas en privé, tu peux directement l'y avoir accés !!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print SampleList[num].Depth
    Tu as aussi la méthode __repr__ qui te permet d'afficher ce que tu veux quand tu appelles ton objet directement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Def __repr__(self):
       return "Depth : %s" %(self.Depth)

  5. #5
    Membre à l'essai
    Inscrit en
    Décembre 2002
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 22
    Points : 19
    Points
    19
    Par défaut
    Merci, je vais explorer cela.

    J'ai trouvé une façon de trier ma liste sur l'attribut depth :

    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
    #Creation de la classe Sample
    class SampleClass :
     
        def __init__(self, HoleId, SampleId, Depth, THM):
            self.HoleId=HoleId
            self.SampleId=SampleId
            self.Depth=Depth
            self.THM=THM
     
        #methode permettant de retourner une representation
        #en string de l'objet
        def __str__(self):
            out = "Hole %d Sample %d Depth %f THM %d" \
    		%(self.HoleId, self.SampleId, self.Depth, self.THM)
            return out
     
        #methode de comparaison general basee sur
        #l'attribut Depth
        def __cmp__(self,sample2):
            return cmp(self.Depth, sample2.Depth)
     
     
    #Liste globale des samples
    SampleList = []
     
    #Fonction qui va permettre d'afficher le contenu de ma liste
    def affichSamples():
        print"Liste des Samples:\n"
        for samp in SampleList:
            print"\t",samp
     
    s1 = SampleClass(10,101,1.5,3)
    s2 = SampleClass(10,102,3,3)
    s3 = SampleClass(10,103,4.5,3)
    s4 = SampleClass(10,104, 6, 3)
     
    SampleList=[s4,s1,s3,s2]
     
    affichSamples()
     
    SampleList.sort()
     
    affichSamples()
    Ce qui me donne pour les deux affichSamples():

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    >>> Liste des Samples:
     
    	Hole 10 Sample 104 Depth 6.000000 THM 3
    	Hole 10 Sample 101 Depth 1.500000 THM 3
    	Hole 10 Sample 103 Depth 4.500000 THM 3
    	Hole 10 Sample 102 Depth 3.000000 THM 3
    >>> Liste des Samples:
     
    	Hole 10 Sample 101 Depth 1.500000 THM 3
    	Hole 10 Sample 102 Depth 3.000000 THM 3
    	Hole 10 Sample 103 Depth 4.500000 THM 3
    	Hole 10 Sample 104 Depth 6.000000 THM 3

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. MVVM et Binding d'objets contenant des listes d'objets
    Par Tanous dans le forum Windows Presentation Foundation
    Réponses: 5
    Dernier message: 21/07/2010, 15h01
  2. manipulation des listes chainées
    Par bounadalvidal dans le forum Débuter
    Réponses: 8
    Dernier message: 19/01/2010, 20h40
  3. Algorithme de type "cksum" sur des listes d'objets
    Par orelien60110 dans le forum Sécurité
    Réponses: 1
    Dernier message: 18/08/2008, 19h07
  4. Performances avec des listes d'objets
    Par metalcoyote dans le forum Langage
    Réponses: 9
    Dernier message: 20/05/2008, 12h11
  5. De la manipulation des listes déroulantes
    Par Herode dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 07/11/2007, 17h55

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