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

  FORUM HardWare.fr
  Programmation
  Python

  Chargement dynamique de classes

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Chargement dynamique de classes

n°2175231
rclsilver
Posté le 11-02-2013 à 17:02:10  profilanswer
 

Hello,
 
Je suis en train de développer un petit script pour utiliser la fonctionnalité ENC (External Node Classifier) de puppet.
 
Le but de mon programme est que pour un mot clé donné (qui correspond à un objectClass dans un annuaire LDAP), une classe Python réalise un job.
 
Je possède donc un module python "mappers" avec dedans un fichier __init__.py et un ensemble de classes :
 - AbstractMapper qui est une classe "abstraite" représentant un mapper
 - un mapper par service (NtpServiceMapper, NetworkInterfaceMapper, TomcatInstanceMapper, etc...)
 
Le but est que le chargement de ces classes soit dynamique, pour que quand on souhaite ajouter un nouveau service, il suffit d'ajouter le schéma LDAP, la classe python (et bien sur, l'utiliser dans l'annuaire...).
 
Je voudrais donc avoir un système de factory, qui dit que pour un objectClass donné, j'associe un mappeur via une instanciation de sa classe.
 
Si je vois comment faire tout simplement dans plusieurs langages, comme Java ou PHP, j'ai un peu plus de mal avec Python... En java, j'aurais défini un bloc static {} dans chacun de mes mappers, qui se seraient référencés tout seul auprès de la factory, via la ligne suivante :

Code :
  1. MapperFactory.add("ntpService", new NtpServiceMapper());


 
Est-il possible d'avoir un comportement plutôt similaire en Python ?  
 
Depuis mon code principal, j'ai déjà réussi (je pense) à charger toutes les classes en ajoutant le dossier "mappers" (présent dans le même répertoire que mon script, soit __file__) et en faisant un :

Code :
  1. from mappers import *


 
Merci d'avance pour vos réponses, je suis sur que ça doit être "tout con", mais bon.. :(

mood
Publicité
Posté le 11-02-2013 à 17:02:10  profilanswer
 

n°2175505
masklinn
í dag viðrar vel til loftárása
Posté le 13-02-2013 à 12:02:48  profilanswer
 

  • Tu fais l'enregistrement explicitement dans ton fichier (un module Python, c'est du code exécuté, donc rien ne t'empêche de faire suivre chaque déclaration de classe par un truc genre "mappers.append(Class)"
  • Tu fais l'enregistrement en automagique via une métaclasse (il te faut une métaclasse — et probablement une classe — de base)
  • À partir d'une classe de base, tu traverses récursivement ses sous-classes


C'est comme tu préfères. Tu as déjà une classe de base donc 3 peut être appliqué directement.

 

Et pas besoin d'un star-import pour charger les classes, `import mappers` devrait suffire.


Message édité par masklinn le 13-02-2013 à 12:04:54

---------------
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

  Chargement dynamique de classes

 

Sujets relatifs
Une infobulle dynamique qui va chercher infos dans BDD ?Problème TPE Création d'un site web dynamique
tableau 2D dynamique[Divers] Bannière image dynamique
Comment initialiser un tableau 2 dimensions de manière dynamique ?[Java/ANT] Chercher des classes d'un type précis
Tri dynamiqueTableau dynamique
[résolu] taper texte dans champs text et affichage dynamiqueFlash - Chargement image via loader
Plus de sujets relatifs à : Chargement dynamique de classes


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