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 :

Instancier une classe dont le nom est contenu dans une String


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 15
    Par défaut Instancier une classe dont le nom est contenu dans une String
    Bonjour,


    Je veux instancier une classe dont je ne connais pas le nom à l'avance. Il sera dans une String lors de l'execution du programme.

    Idéalement, je voudrais avoir un fichier de config qui contient des noms de classes, par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    [maSection]
    actions = monPackage.Classe1
    action2 = Classe2
    Et dans mon code, je voudrais pouvoir instancier ma classe selon ce paramètre. Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    action = ConfigReader.get(maSection, actions)
    monInstance = [fonction/action/astuce](action)(paramInstance)
    Je sais qu'il est possible d'instancier un module dynamiquement avec __import__, par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monModule = __import__(actions)
    Mais je n'ai pas réussi à instancier la classe sans faire de test sur son nom.

    Une idée ?

    Stéphane

  2. #2
    Expert confirmé
    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

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 15
    Par défaut
    Merci mais malheureusement cela ne fournit pas la réponse à mon problème !
    Je ne veux pas déclarer un nouvel attribut ou une nouvelle fonction, mais instancier une nouvelle classe ...

    Quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    maClasse = "ActionsPackage.ClasseAction1"
    monInstance = __import__(maClasse).__init__()
    Malheureusement ce code ne marche pas car __import__ ne permet d'importer que des modules et non des classes.

    Merci quand même.

  4. #4
    Membre Expert
    Avatar de DelphiManiac
    Homme Profil pro
    Homme à tout faire
    Inscrit en
    Mars 2002
    Messages
    1 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Homme à tout faire
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 147
    Par défaut
    Admettons que j'ai une arborescence du style suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Dossier : mypackage
        File : __init__.py
        File : module.py
    File  : test.py
    avec __init__.py vide et module.py contenant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    class Test():
        def my_print(self, str):
            print str
    Le fichier test.py est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    my_package = 'mypackage'
    my_module = 'module'
    my_class = 'Test'
     
    package = __import__ (my_package, fromlist=[my_module])
    cls = package.__dict__[my_module].__dict__[my_class]()
     
    cls.my_print ("coucou")
    Est ce que ça réponds à la question ?

  5. #5
    Membre chevronné
    Homme Profil pro
    Responsable du parc et des réseaux de télécommunication
    Inscrit en
    Mai 2003
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable du parc et des réseaux de télécommunication
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2003
    Messages : 290
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    [maSection]
    action1 = Classe1
    action2 = Classe2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    import monModule
    action = ConfigReader.get('maSection', 'action1')
    monInstance = getattr(monModule,action)
    monInstance()

  6. #6
    Membre expérimenté
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2003
    Messages : 304
    Par défaut
    Salut,

    Je préfère la solution de pierjean qui me parait la plus propre.

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

Discussions similaires

  1. MACRO de copie d'une feuille dont le nom est contenu dans une cellule
    Par youssy dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 01/03/2015, 19h39
  2. [XL-2007] Sélectionner une feuille dont le nom est contenu dans une cellule
    Par Nonno 94 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 30/06/2014, 20h47
  3. Réponses: 3
    Dernier message: 07/01/2010, 16h54
  4. Réponses: 7
    Dernier message: 25/10/2005, 15h19
  5. [Reflection] Executer une fonction dont le nom est contenu dans un String
    Par christobal dans le forum API standards et tierces
    Réponses: 8
    Dernier message: 05/07/2004, 15h23

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