2013-07-31 7 views
18

Mam klasyUzyskaj klasy pyton obiekt z nazwą klasy String w tym samym module

class Foo(): 
    def some_method(): 
     pass 

I inną klasę w tym samym module:

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

Chcę być w stanie uzyskać dostęp klasa Foo za pomocą ciągu "Foo".

mogę to zrobić, jeśli jestem w innym modułem za pomocą:

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

mogę zrobić tego samego rodzaju rzeczy w tym samym module?

Faceci z IRC zasugerowali, że używam mapowania dict, które mapuje nazwy klas łańcuchów na klasy, ale nie chcę tego robić, jeśli jest łatwiejszy sposób.

+1

i tak, przy użyciu dict mapowania jest chyba właściwa droga ... –

+1

Dzięki. Zakończyłem refaktoryzację, bo nie chciałem używać "globalsów" ani używać mapowania. –

Odpowiedz

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

# or 

globals()['Foo'] 
+0

Zaakceptowano tę odpowiedź, ponieważ obejmuje ona zarówno metody "sys", jak i "globals". –

2
globals()[class_name] 

Pamiętaj, że jeśli nie jest to absolutnie konieczne, możesz chcieć zmienić kod, aby go nie używać.

Powiązane problemy