66

我有一堂课

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

4

3 回答 3

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

# or 

globals()['Foo']
于 2013-07-31T01:17:23.853 回答
9

sys您可以在模块的帮助下做到这一点:

import sys

def str2Class(str):
    return getattr(sys.modules[__name__], str)
于 2013-07-31T01:17:24.307 回答
6
globals()[class_name]

请注意,如果这不是绝对必要的,您可能需要重构代码以不使用它。

于 2013-07-31T01:17:18.100 回答