Reputation: 15082
I have a class
class Foo():
def some_method():
pass
And another class in the same module:
class Bar():
def some_other_method():
class_name = "Foo"
# Can I access the class Foo above using the string "Foo"?
I want to be able to access the Foo
class using the string "Foo".
I can do this if I'm in another module by using:
from project import foo_module
foo_class = getattr(foo_module, "Foo")
Can I do the same sort of thing in the same module?
The guys in IRC suggested I use a mapping dict that maps string class names to the classes, but I don't want to do that if there's an easier way.
Upvotes: 82
Views: 76222
Reputation: 27792
You can do it with help of the sys
module:
import sys
def str2Class(str):
return getattr(sys.modules[__name__], str)
Upvotes: 12
Reputation: 28693
import sys
getattr(sys.modules[__name__], "Foo")
# or
globals()['Foo']
Upvotes: 123
Reputation: 280688
globals()[class_name]
Note that if this isn't strictly necessary, you may want to refactor your code to not use it.
Upvotes: 9