2013-07-31 11 views
18

Ho una classeOttenere oggetto classe Python dal nome della classe stringa nello stesso modulo

class Foo(): 
    def some_method(): 
     pass 

E un'altra classe nello stesso modulo:

class Bar(): 
    def some_other_method(): 
     class_name = "Foo" 
     #can I access the class Foo above using the string "Foo"? 

voglio essere in grado di accedere la classe Foo utilizzando la stringa "Foo".

posso fare questo se mi trovo in un altro modulo utilizzando:

from project import foo_module 
foo_class = getattr(foo_module, "Foo") 

posso fare la stessa cosa nello stesso modulo?

I ragazzi in IRC mi hanno suggerito di utilizzare un comando di mappatura che associa i nomi delle classi stringa alle classi, ma non voglio farlo se c'è un modo più semplice.

+1

e sì, utilizzando un dict mappatura è probabilmente il modo corretto di andare ... –

+1

Grazie. Ho finito con il refactoring perché non volevo usare "globals" o usare un dict di mappatura. –

risposta

27
import sys 
getattr(sys.modules[__name__], "Foo") 

# or 

globals()['Foo'] 
+0

Accetta questa risposta perché copre sia i metodi 'sys' che' globals'. –

2
globals()[class_name] 

Si noti che se questo non è strettamente necessario, si consiglia di rifattorizzare il codice per non utilizzarlo.

Problemi correlati