Ответ 1
import sys
getattr(sys.modules[__name__], "Foo")
# or
globals()['Foo']
У меня есть класс
class Foo():
def some_method():
pass
И еще один класс в том же модуле:
class Bar():
def some_other_method():
class_name = "Foo"
#can I access the class Foo above using the string "Foo"?
Я хочу иметь доступ к классу Foo
, используя строку "Foo".
Я могу сделать это, если я в другом модуле, используя:
from project import foo_module
foo_class = getattr(foo_module, "Foo")
Могу ли я сделать то же самое в одном модуле?
Ребята из IRC предположили, что я использую map dict, который сопоставляет имена классов классов классам, но я не хочу этого делать, если есть более простой способ.
import sys
getattr(sys.modules[__name__], "Foo")
# or
globals()['Foo']
Вы можете сделать это с помощью модуля sys
:
import sys
def str2Class(str):
return getattr(sys.modules[__name__], str)
globals()[class_name]
Обратите внимание, что если это не является строго необходимым, вы можете захотеть реорганизовать ваш код, чтобы не использовать его.