Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1728 connectés 

  FORUM HardWare.fr
  Programmation
  Python

  Manipuler une liste d'objets

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Manipuler une liste d'objets

n°1381555
xla99
Posté le 05-06-2006 à 18:29:51  profilanswer
 

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 .... [:tinostar]  
 
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 :
  1. class SampleClass :
  2. #Creation de la classe sample
  3.      def __init__ (self, HoleId, SampleId, Depth, THM):
  4.      #Definition des attributs de chaque instance
  5.           self.HoleId = HoleId
  6.           self.SampleId = SampleId
  7.           self.Depth = Depth
  8.           self.THM = THM
  9. #exemple de creation d'instances samples
  10. s1 = SampleClass(10,101,1.5,2)
  11. s2 = SampleClass (10,102,3,3)
  12. s3 = SampleClass(10,103,4.5,5)
  13. s4 = SampleClass ( 10,104, 6, 1)
  14. #creation de la liste
  15. SampleList = []
  16. #je popule la liste avec les samples dans le desordre
  17. SampleList.append(s4)
  18. SampleList.append(s1)
  19. SampleList.append(s3)
  20. 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.


Message édité par xla99 le 06-06-2006 à 02:22:08
mood
Publicité
Posté le 05-06-2006 à 18:29:51  profilanswer
 

n°1381559
masklinn
í dag viðrar vel til loftárása
Posté le 05-06-2006 à 18:36:45  profilanswer
 

1. Style [:pingouino] Tu ne suis pas du tout les conventions de la PEP 8 "Style Guide for Python Code", prière de la lire [:pingouino]
2. Fais hériter tes classes d' "object"
3. __cmp__
4. Ca te dirait de lire le Python Tutorial?


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1381652
xla99
Posté le 05-06-2006 à 20:46:56  profilanswer
 

masklinn a écrit :

1. Style [:pingouino] Tu ne suis pas du tout les conventions de la PEP 8 "Style Guide for Python Code", prière de la lire [:pingouino]
2. Fais hériter tes classes d' "object"
3. __cmp__
4. Ca te dirait de lire le Python Tutorial?


 
1. Je m'excuse mais bon, la touche tab ne fonctionne pas. J'ai corrigé ma syntaxe avec moultes spaces.
 
2/3/4 Je me suis tapé tout le chapitre sur les listes et l'OOP ( entre autre ) de Learning Python Ed O'Reilly ainsi que Plonger au coeur de python et A byte of python. Bon, je débute complêtement en Python juste par interet pour pimenter ma job et ma seule experience  en progr est un cours d'initiation en VB il y a 5 ans [:cupra] .  
Je pige les concept mais pour les appliquer, c'est autre chose ! Tu me parles de faire hériter mes instances de la Classe SampleClass en m'aidant de __cmp__ . Je veus bien mais mon problème là, c'est que je n'arrive pas à accéder aux attributs de mes instances dans ma liste. Si je fais un print  de celle-ci, j'obtiens l'espace mémoire qui leur est aloué ( si j'ai bien compris ) :

Citation :

print SampleList
>>> [<__main__.SampleClass instance at 0x0116B378>, <__main__.SampleClass instance at 0x01162800>, <__main__.SampleClass instance at 0x0116B508>, <__main__.SampleClass instance at 0x0116B940>]


 
Donc, comment je pourrais avoir accès à sX.Depth par exemple ?
 
Oui, je suis un gros bleu, je pourrais tout faire avec un paquet de listes imbriquées et juste en prodédural mais là, j'aimerais faire l'exercice uniquement en OOP avec classes, methodes, etc ... C'est sur qu'il y a quelque chose qui m'échappe complêtement ici mais je ne trouve aucune référence dans les bouquins ou sur internet de manipulation de listes composées d'instances d'une classe d'objet. Je comprends les exemples et les utilisation des listes ( basiques ) et des objets, j'arrive à me taper les exercices des bouquins mais nul part on m'explique comment mixer les deux !  
 
Alors voila, je suis démasqué  [:tinostar] Mais je vais continuer à m'ésquinter les neurones la dessus.
 
Merci

Message cité 1 fois
Message édité par xla99 le 05-06-2006 à 22:02:57
n°1381682
masklinn
í dag viðrar vel til loftárása
Posté le 05-06-2006 à 22:02:05  profilanswer
 

xla99 a écrit :

1. Je m'excuse mais bon, la touche tab ne fonctionne pas. J'ai corrigé ma syntaxe avec moultes spaces.


Je parlais pas des espaces, va lire cette putain de PEP8, et si tu veux mettre du code il faut utiliser la balise code.

xla99 a écrit :

Je pige les concept mais pour les appliquer, c'est autre chose ! Tu me parle de faire hériter mes instances de la Classe SampleClass en m'aidant de __cmp__ .


WTF [:petrus dei]
 
J'ai jamais dit ça [:pingouino]
 
J'ai dit deux choses:
1. Quand tu crées une classe, fait la hériter d'object ou d'une classe héritant d'objet, ça veut dire faire ça:

Code :
  1. class TestClass(object):
  2.    pass


2. Si tu veux pouvoir trier une liste, il faut que tes objets implémentent la méthode __cmp__, comparateur général, suffit d'aller voir dans l'aide python pour savoir comment ça fonctionne

xla99 a écrit :

Je veus bien mais mon problème là, c'est que je n'arrive pas à accéder aux attributs de mes instances dans ma liste. Si je fais un print  de celle-ci, j'obtiens l'espace mémoire qui leur est aloué ( si j'ai bien compris ) :


Ben t'as mal compris, print ne fait qu'imprimer ce que object.__str__() retourne.

xla99 a écrit :

Donc, comment je pourrais avoir accès à sX.Depth par exemple ?


Heuuu c'est une blague [:petrus dei]

xla99 a écrit :

Je comprends les exemples et les utilisation des listes ( basiques ) et des objets


J'ai pas l'impression non.
 
Une liste d'objets contient des objets, c'est tout, chaque slot de ta liste contient un objet [:spamafote]
 
Comment tu ferais pour récupérer le 3e objet de ta liste par exemple [:petrus dei]

Message cité 1 fois
Message édité par masklinn le 05-06-2006 à 22:03:46

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1381685
xla99
Posté le 05-06-2006 à 22:06:21  profilanswer
 

masklinn a écrit :

Je parlais pas des espaces, va lire cette putain de PEP8, et si tu veux mettre du code il faut utiliser la balise code.
 
WTF [:petrus dei]
 
J'ai jamais dit ça [:pingouino]
 
J'ai dit deux choses:
1. Quand tu crées une classe, fait la hériter d'object ou d'une classe héritant d'objet, ça veut dire faire ça:

Code :
  1. class TestClass(object):
  2.    pass


2. Si tu veux pouvoir trier une liste, il faut que tes objets implémentent la méthode __cmp__, comparateur général, suffit d'aller voir dans l'aide python pour savoir comment ça fonctionne
 
Ben t'as mal compris, print ne fait qu'imprimer ce que object.__repr__() retourne.
 
Heuuu c'est une blague [:petrus dei]
 
J'ai pas l'impression non.
 
Une liste d'objets contient des objets, c'est tout, chaque slot de ta liste contient un objet [:spamafote]
 
Comment tu ferais pour récupérer le 3e objet de ta liste par exemple [:petrus dei]


 
Bon, je suis en train de réaliser que le sol se dérobe sous mes pieds et que j'ai encore bcp de lectures devant moi et pas mal de theorie à ingurgiter.
 [:pseudoman]  
En tout cas, merci quand même
 [:cupra]  

n°1381688
masklinn
í dag viðrar vel til loftárása
Posté le 05-06-2006 à 22:08:38  profilanswer
 

Nan mais tu peux continuer à poser des questions hein, simplement si tu as vraiment lu le Python Tutorial et Dive je pense vraiment que tu ne les as pas compris et que tu devrais les relire sérieusement


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1382104
xla99
Posté le 06-06-2006 à 14:57:50  profilanswer
 

Bon, j'ai trouvé la solution
 

Code :
  1. #Creation de la classe Sample
  2. class SampleClass :
  3.     def __init__(self, HoleId, SampleId, Depth, THM):
  4.         self.HoleId=HoleId
  5.         self.SampleId=SampleId
  6.         self.Depth=Depth
  7.         self.THM=THM
  8.     #methode permettant de retourner une representation
  9.     #en string de l'objet
  10.     def __str__(self):
  11.         out = "Hole %d Sample %d Depth %f THM %d" \
  12.  %(self.HoleId, self.SampleId, self.Depth, self.THM)
  13.         return out
  14.    
  15.     #methode de comparaison general basee sur
  16.     #l'attribut Depth
  17.     def __cmp__(self,sample2):
  18.         return cmp(self.Depth, sample2.Depth)
  19. #Liste globale des samples
  20. SampleList = []
  21. #Fonction qui va permettre d'afficher le contenu de ma liste
  22. def affichSamples():
  23.     print"Liste des Samples:\n"
  24.     for samp in SampleList:
  25.         print"\t",samp
  26.            
  27. s1 = SampleClass(10,101,1.5,3)
  28. s2 = SampleClass(10,102,3,3)
  29. s3 = SampleClass(10,103,4.5,3)
  30. s4 = SampleClass(10,104, 6, 3)
  31. SampleList=[s4,s1,s3,s2]
  32. affichSamples()
  33. SampleList.sort()
  34. affichSamples()


 
Ce qui me donne pour les deux affichSamples():
 

Code :
  1. >>> Liste des Samples:
  2. Hole 10 Sample 104 Depth 6.000000 THM 3
  3. Hole 10 Sample 101 Depth 1.500000 THM 3
  4. Hole 10 Sample 103 Depth 4.500000 THM 3
  5. Hole 10 Sample 102 Depth 3.000000 THM 3
  6. >>> Liste des Samples:
  7. Hole 10 Sample 101 Depth 1.500000 THM 3
  8. Hole 10 Sample 102 Depth 3.000000 THM 3
  9. Hole 10 Sample 103 Depth 4.500000 THM 3
  10. Hole 10 Sample 104 Depth 6.000000 THM 3


 
Voila.
 
Par contre, je ne comprends pas pourquoi je devrais faire hériter ma classe SampleClass d'une classe superieur

Message cité 1 fois
Message édité par xla99 le 06-06-2006 à 15:06:44
n°1382132
masklinn
í dag viðrar vel til loftárása
Posté le 06-06-2006 à 15:20:04  profilanswer
 

xla99 a écrit :

Bon, j'ai trouvé la solution
 

Code :
  1. #Creation de la classe Sample
  2. class SampleClass :
  3.     def __init__(self, HoleId, SampleId, Depth, THM):
  4.         self.HoleId=HoleId
  5.         self.SampleId=SampleId
  6.         self.Depth=Depth
  7.         self.THM=THM
  8.     #methode permettant de retourner une representation
  9.     #en string de l'objet
  10.     def __str__(self):
  11.         out = "Hole %d Sample %d Depth %f THM %d" \
  12.  %(self.HoleId, self.SampleId, self.Depth, self.THM)
  13.         return out
  14.    
  15.     #methode de comparaison general basee sur
  16.     #l'attribut Depth
  17.     def __cmp__(self,sample2):
  18.         return cmp(self.Depth, sample2.Depth)
  19. #Liste globale des samples
  20. SampleList = []
  21. #Fonction qui va permettre d'afficher le contenu de ma liste
  22. def affichSamples():
  23.     print"Liste des Samples:\n"
  24.     for samp in SampleList:
  25.         print"\t",samp
  26.            
  27. s1 = SampleClass(10,101,1.5,3)
  28. s2 = SampleClass(10,102,3,3)
  29. s3 = SampleClass(10,103,4.5,3)
  30. s4 = SampleClass(10,104, 6, 3)
  31. SampleList=[s4,s1,s3,s2]
  32. affichSamples()
  33. SampleList.sort()
  34. affichSamples()




Vas lire cette putain de PEP8 bordel [:pingouino]

xla99 a écrit :

Par contre, je ne comprends pas pourquoi je devrais faire hériter ma classe SampleClass d'une classe superieur


parce que ça permet d'utiliser les new-style classes permettant d'utiliser les properties et les métaclasses, et que dans Python 3.0 toutes les classes seront new-style.
http://www.python.org/download/rel [...] escrintro/
http://www.python.org/dev/peps/pep-0252/
http://www.python.org/dev/peps/pep-0253/


Message édité par masklinn le 06-06-2006 à 15:21:20

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1382150
xla99
Posté le 06-06-2006 à 15:39:29  profilanswer
 

Bon, je m'excuse de passer pour un gros naze et de continuer à m'humilier en publique mais la putain de PEP8, je l'ai lu en long et en large. (http://www.python.org/dev/peps/pep-0008/) [:pseudoman]  
 
Donc j'ai collé des 4 espaces partout, mes lignes ne font pas plus de 79 caractères, je saute des lignes quand il le faut, je respecte les espaces dans mes expressions et mes déclarations, je colle des commentaires, etc ... Bon, il doit surement y avoir des erreurs de-ci de-là mais de là à s'énerver !
Donc, c'est quoi le putain de problème avec la PEP8 bordel ? Qu'est ce que je ne respecte pas encore dans la présentation de mon code ?
 
Pour les new-style classes et les metaclasses, je vais aller voir cela  :)

n°1382162
masklinn
í dag viðrar vel til loftárása
Posté le 06-06-2006 à 15:47:53  profilanswer
 

xla99 a écrit :

Donc j'ai collé des 4 espaces partout, mes lignes ne font pas plus de 79 caractères, je saute des lignes quand il le faut, je respecte les espaces dans mes expressions et mes déclarations, je colle des commentaires, etc ... Bon, il doit surement y avoir des erreurs de-ci de-là mais de là à s'énerver !
Donc, c'est quoi le putain de problème avec la PEP8 bordel ? Qu'est ce que je ne respecte pas encore dans la présentation de mon code ?


les fonctions, variables et attributs doivent être en underscore_separated_lower_case, pas en PascalCase


Message édité par masklinn le 06-06-2006 à 15:49:31

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
mood
Publicité
Posté le 06-06-2006 à 15:47:53  profilanswer
 

n°1384578
chaica
Posté le 09-06-2006 à 14:58:46  profilanswer
 

Et y'a pas de docstrings, ce qui est plus gênant.

n°1384589
masklinn
í dag viðrar vel til loftárása
Posté le 09-06-2006 à 15:05:02  profilanswer
 

chaica a écrit :

Et y'a pas de docstrings, ce qui est plus gênant.


non


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Python

  Manipuler une liste d'objets

 

Sujets relatifs
balayer liste chainéeliste d'achat denree alimentaire ou autres(tres urgent svp)
Incrémenter une liste de facon ordonnée ?[RESOLU] Changer largeur zone de liste access
Liste Deroulante dans le genre barre d'adresse du navigateurCHECKED et case à cocher : liste à partir d'une table [RESOLU]
Rechercher dans une boite à liste[PHP] alimenter une liste déroulante à partir d'une bd MySQL
2 pbs : liste déroulante et microsoft jetSpprimer une "liste" de repertoires ?
Plus de sujets relatifs à : Manipuler une liste d'objets


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR