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.
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
import sys getattr(sys.modules[__name__], "Foo") # or globals()['Foo']
Method 2
You can do it with help of the sys module:
import sys
def str2Class(str):
return getattr(sys.modules[__name__], str)
Method 3
globals()[class_name]
Note that if this isn’t strictly necessary, you may want to refactor your code to not use it.
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0