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 :

Fonction de classe sur des éléments d'une liste d'objets


Sujet :

Python

Vue hybride

bdanet Fonction de classe sur des... 24/04/2018, 15h45
lg_53 list = [Arc()] * n A ne... 24/04/2018, 15h54
bdanet Merci beaucoup! ... 24/04/2018, 16h05
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 4
    Par défaut Fonction de classe sur des éléments d'une liste d'objets
    Bonjour à tous,

    Je me suis aperçu que je ne manipulais sans doute pas correctement les listes d'objets.

    Voilà mon problème (un peu simplifié mais représentatif) :
    J'ai créé une classe Arc avec une fonction de classe Calcul(a) qui modifie les attributs de l'objet à partir du paramètre a.
    Je crée une liste que je parcours ensuite pour la modifier.

    list = [Arc()] * n où n entier
    A une liste de même taille (d'entiers par exemple)
    for i in range (n)
    list[i].Calcul(A[i])

    Au final, je me rends compte que tous les objets de ma liste sont identiques, égaux à la valeur calculée sur la dernière itération...
    Il se trouve que la fonction Calcul s'applique à chaque fois à tous les éléments de ma liste et non seulement à celui que je pensais indiquer pourtant clairement par list[i]!
    Pouvez-vous m'indiquer comment procéder? Est-ce ma fonction que j'ai mal écrite ou faut-il décrire ma liste autrement?

    Merci d'avance!

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par défaut
    A ne JAMAIS faire lorsqu'on manipule une liste d'objet. Car là vous créer n références au seul et unique objet créé par Arc(). Et c'est n référence pointe sur le meme objet ! Donc quoi vous modifiiez par la suite vous modifiez donc tout, puisqu'en réalité vous n'avez qu'un seul objet.

    Il faut écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     list = [Arc() for _ in range(n) ]
    qui là engendre bien la création de n objets distincts.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 4
    Par défaut
    Merci beaucoup!

    Effectivement, ça me paraît tout à fait logique maintenant, mais comme je suis en train de transférer du VB sur du python j'en perds parfois mon latin!

    Résolu donc!

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

Discussions similaires

  1. Gestion des droits sur les éléments d'une liste.
    Par SpaceFrog dans le forum Développement Sharepoint
    Réponses: 14
    Dernier message: 22/01/2016, 10h58
  2. [DisplayTag] Affichage d'une partie des éléments d'une liste sur un critère
    Par jaguars_s dans le forum Taglibs
    Réponses: 4
    Dernier message: 30/07/2010, 18h15
  3. Relier des données sur des éléments d'une form
    Par Takumi dans le forum Windows Forms
    Réponses: 5
    Dernier message: 18/01/2010, 16h06
  4. Eviter l'affichage des éléments d'une liste déroulante
    Par auriolbeach dans le forum Access
    Réponses: 1
    Dernier message: 28/02/2006, 07h50
  5. [CSS]Changer l'interligne des éléments d'une liste à puces
    Par khany dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 21/03/2005, 13h57

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