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 :

Créer des objets à partir d'une variable ou d'une chaine de caractères.


Sujet :

Python

  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    amateur
    Inscrit en
    Mai 2022
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : amateur
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2022
    Messages : 2
    Par défaut Créer des objets à partir d'une variable ou d'une chaine de caractères.
    Bonjour,

    Je cherche à créer des objets (instances de classe si j'ai bien compris) à partir d'une variable ou d'une chaine de caractères.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class Ovni:
        def __init__(self,x,y):
            self.x = x
            self.y = y
     
    ovni1 = Ovni(10,10)
    ovni2 = Ovni(10,10)
    ...
    ovni100= Ovni(10,10)
    Je ne sais pas à l'avance combien d'objets seront créés donc je préfèrerai éviter de les créer un par un.
    J'avais pensé (mais sans succès) à quelque chose du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class Ovni:
        def __init__(self,x,y):
            self.x = x
            self.y = y
     
    for a in range(100):
        eval('ovni'+string(a))=Ovni(10,10)
    La seule méthode qui fonctionne semble être d'utiliser exec:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class Ovni:
        def __init__(self,x,y):
            self.x = x
            self.y = y
     
    for a in range(100):
        exec('ovni'+string(a)+'=Ovni(10,10)')
    Mais ça semble assez sale.
    Il doit y avoir une autre méthode pour faire ça.


    Merci de vos éventuels éclairages.

  2. #2
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    Bonjour,

    Tu n'as pas besoin et ne devrait pas avoir à créer dynamiquement des variables... Il existe des objets en python permettant de contenir tes éléments (instances) construits via ta classe.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ovnis = [Ovni(10, 10) for _ in range(100)]
    et tu accèdes à tes éléments facilement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    get_ovni = lambda i: ovnis[i-1]
    print(get_ovni(1))
    Désolé pas relu mon code, mais c'est l'idée...

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

    Informations professionnelles :
    Activité : amateur
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2022
    Messages : 2
    Par défaut
    Donc on peut créer une liste d'objets sans avoir besoin de les nommer un par un.
    Merci, je teste ça ce soir.

  4. #4
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    Citation Envoyé par badabu Voir le message
    Donc on peut créer une liste d'objets sans avoir besoin de les nommer un par un.
    Oui c'est le principe !

  5. #5
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 323
    Par défaut
    bonjour
    Citation Envoyé par badabu Voir le message
    Donc on peut créer une liste d'objets sans avoir besoin de les nommer un par un.
    C'est même quelque chose de très courant, on place les objets dans un conteneur (liste, tuple... autre objet)

    par exemple:
    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
     
    class Fichier:
        pass
     
    fichiers = []   # conteneur
    for fichierNom in liste_repertoire("./"):
        fichier = Fichier(fichierNom)    # créer l'objet
        fichiers.append(fichier)
     
    fichiers = {}   # conteneur
    for fichierNom in liste_repertoire("./"):
        fichier = Fichier(fichierNom)    # créer l'objet
        fichiers[fichierNom] = fichier
     
    print(Fichiers["test.txt"].taille, Fichiers["windows"].taille)
    # print(  ovnis["soucoupe rose"].x )
    même chose que fred1599 mais beaucoup plus décomposé

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 833
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 833
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par badabu Voir le message
    Donc on peut créer une liste d'objets sans avoir besoin de les nommer un par un.
    C'est le principe des tableaux utilisé dans tous les langages.
    Tableau de int: tabInt=[1, 2, 3, 4, 5, 6].
    Tableau d'ovnis: tabOvni=[ovni(10, 10), ovni(10, 10), ovni(10, 10), ovni(10, 10), ovni(10, 10), ovni(10, 10)].
    Il y a bien entendu des syntaxes multiples pour créer ce genre de tableau (qu'en Python on nomme "listes"). fred1599 en a utilisé une autre mais le résultat est le même.

    Ensuite on accède à l'élément désiré par son indice => print(ovni[3]) pour afficher le 4°.

    C'est écrit dans tous les tutoriels Pythons dans les chapitres sur les bases du langage. Et tenter de faire de l'objet sans avoir acquis les bases...

    Citation Envoyé par badabu Voir le message
    J'avais pensé (mais sans succès) à quelque chose du genre : eval('ovni'+string(a))=Ovni(10,10)
    eval() veut l'instruction entière. L'instruction c'est var=truc donc eval("var=truc") => eval("ovni%s=Ovni(10, 10)" % a).
    Mais ça reste effectivement super sale.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. Réponses: 1
    Dernier message: 17/04/2013, 20h00
  2. Créer un objet à partir d'une BDD
    Par Jean-Marc68 dans le forum C#
    Réponses: 3
    Dernier message: 10/02/2013, 20h06
  3. [JDOM] Créer un arbre à partir d'une chaine de caractère.
    Par lcdgdmxe dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 20/04/2010, 11h54
  4. [Lazarus] Créer des fiches à partir d'une fiche modèle
    Par Louis Griffont dans le forum Lazarus
    Réponses: 4
    Dernier message: 19/03/2009, 13h10
  5. Réponses: 3
    Dernier message: 22/01/2009, 16h41

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