2009-12-21 6 views
0

Je génère des noms de classe de façon dynamique, puis je souhaite importer cette classe par son nom pour accéder à une méthode statique.Importer dynamiquement une classe par son nom pour un accès statique

C'est la classe à importer dans « the_module.py »:

class ToImport(object): 

    @classmethod 
    def initialize(cls, parameter): 
     print parameter 

Selon un Blog post c'est pour autant que je suis:

theModule = __import__("the_module") 
toImport = getattr(theModule, "ToImport") 
toImport.initialize("parameter") 

Mais l'exemple du blog semble être incomplet car il me donne un objet module sans la classe désirée ToImport. Regarder le __import__()documentation me montre qu'il y a plus d'attributs optionnels à la fonction. Je parvins avec

theModule = __import__("the_module", globals(), locals(), ["ToImport"]) 

Pourquoi dois-je donner l'attribut fromlist? Est-ce que je ne peux pas importer tous les attributs de modules?

+0

quelle version de py? –

+0

Utiliser Python 2.6.2 – desolat

Répondre

2

J'ai fait exactement ce que vous avez fait et j'ai récupéré la classe.

In [1]: theModule = __import__("the_module") 

In [2]: toImport = getattr(theModule, "ToImport") 

In [3]: toImport.initialize("parameter") 
parameter 

J'utilise Python 2.6.4. Pourriez-vous expliquer plus loin, ce qui ne fonctionne pas exactement pour vous?

+1

Fonctionne pour moi aussi, testé sur Python 2.6.2 (Ubuntu) et Python 2.5.1 (Mac) –

Questions connexes