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

时间:2013-07-31 01:12:44

标签: python

我有一个班级

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

3 个答案:

答案 0 :(得分:44)

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

# or 

globals()['Foo']

答案 1 :(得分:4)

You can do it with help of sys module:

import sys

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

答案 2 :(得分:2)

globals()[class_name]

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