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éation dynamique d'instance


Sujet :

Python

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5
    Points : 5
    Points
    5
    Par défaut création dynamique d'instance
    Bonjour,
    J'essaye de charger des objets à partir d'une liste mais ca marche pas:
    Exemple de code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    class A:
       def hello(self):
          print "hello a"
     
    class B:
       def hello(self):
          print "hello b"
     
    lst=(A,B)
    for Class in lst:
       Class.hello()
    Renvoie TypeError: unbound method hello() must be called with A instance as first argument (got nothing instead)

    comment je peux faire marcher ça.
    Merci
    Sébastien

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 159
    Points : 224
    Points
    224
    Par défaut
    Ton problème vient de
    Ce que tu as mis dans ta liste, ce ne sont pas des objets, mais directement les classes.
    Pour créer un objet, il faut l'instancier à partir de ta classe
    ou alors directement
    Il te faut donc remplir ta liste avec des instances de classes et non des classes

  3. #3
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 474
    Points : 9 277
    Points
    9 277
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    On n'a d'ailleurs pas besoin de donner un nom intermédiaire à l'instance, puisqu'on a celui du tuple:

    Tyrtamos

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 290
    Points : 36 785
    Points
    36 785
    Par défaut
    Salut,
    Ce qui, pour résumer, s'écrit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class A:
       def hello(self):
          print "hello a"
     
    class B:
       def hello(self):
          print "hello b"
     
    lst=(A,B)
    for Class in lst:
       Class().hello()
    -W

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5
    Points : 5
    Points
    5
    Par défaut Merci
    Question résolue.
    Merci de votre aide.

  6. #6
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 758
    Points : 970
    Points
    970
    Par défaut
    bonjour,

    je propose une autre solution:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    class A(object):
        @classmethod
        def hello(obj):
            print "hello a"
     
    class B(object):
        @classmethod
        def hello(obj):
            print "hello b"
     
    lst=(A,B)
    for Class in lst:
       Class.hello()
    j'ai adapté les classes pour que l'exploitation que tu en fais soit correcte, plutôt que d'adapter l'exploitation par rapport à tes classes .

    @classmethod permet d'avoir comme argument implicite (obj) soit une instance (et donc A()) soit une classe (A). Ce qui permet d'appeler la méthode hello dans les deux contextes: soit directement depuis l'instance, soit depuis sa classe.

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

Discussions similaires

  1. Problème de création dynamique d'instance
    Par Higgins dans le forum C#
    Réponses: 7
    Dernier message: 20/07/2011, 10h33
  2. Réponses: 3
    Dernier message: 06/02/2008, 18h11
  3. [Rave Report] problème de création dynamique
    Par Nivux dans le forum Rave
    Réponses: 2
    Dernier message: 24/05/2003, 00h07
  4. TWebBrowser et création dynamique
    Par BakaOnigiri dans le forum Web & réseau
    Réponses: 2
    Dernier message: 01/09/2002, 10h53
  5. Création dynamique de TImages
    Par Dric dans le forum C++Builder
    Réponses: 10
    Dernier message: 08/07/2002, 12h36

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