2013-07-31 14 views
18

ich eine KlasseGet Python-Klasse-Objekt aus Klassennamen Zeichenfolge im selben Modul

class Foo(): 
    def some_method(): 
     pass 

Und eine andere Klasse im selben Modul haben:

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

ich zugreifen möchten in der Lage sein die Foo Klasse mit der Zeichenfolge "Foo".

Ich kann dies tun, wenn ich in einem anderen Modul bin unter Verwendung:

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

Kann ich die gleiche Art der Sache im selben Modul zu tun?

Die Leute im IRC haben vorgeschlagen, dass ich ein Mapping-Dict verwende, das String-Klassennamen den Klassen zuordnet, aber das möchte ich nicht, wenn es einen einfacheren Weg gibt.

+1

und ja, eine Zuordnung DIKT ist wahrscheinlich der richtige Weg zu gehen ... –

+1

Danke. Am Ende habe ich Refactoring gemacht, weil ich nicht "Globals" verwenden oder ein Mapping-Diktat verwenden wollte. –

Antwort

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

# or 

globals()['Foo'] 
+0

Akzeptiert diese Antwort, weil sie sowohl die 'sys' als auch die' globals' Methoden abdeckt. –

2

Beachten Sie, dass, wenn dies nicht unbedingt erforderlich ist, Sie Ihren Code umgestalten sollten, um ihn nicht zu verwenden.

Verwandte Themen