如何从同一模块中的类名字符串中获取类对象?

我还有课

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中的人建议我使用映射 dict 将字符串类名映射到类,但是如果有更简单的方法,我就不想这样做了。

62082 次浏览
globals()[class_name]

请注意,如果严格来说这不是必需的,那么可能需要重构代码以避免使用它。

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


# or


globals()['Foo']

你可以在 sys模块的帮助下完成:

import sys


def str2Class(str):
return getattr(sys.modules[__name__], str)