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

Chr*_*nel 33 python

我上课了

class Foo():
    def some_method():
        pass
Run Code Online (Sandbox Code Playgroud)

同一模块中的另一个类:

class Bar():
    def some_other_method():
        class_name = "Foo"
        #can I access the class Foo above using the string "Foo"?
Run Code Online (Sandbox Code Playgroud)

我希望能够Foo使用字符串"Foo" 访问该类.

如果我使用另一个模块,我可以这样做:

from project import foo_module
foo_class = getattr(foo_module, "Foo")
Run Code Online (Sandbox Code Playgroud)

我可以在同一个模块中做同样的事情吗?

IRC中的人建议我使用映射字典将字符串类名映射到类,但如果有更简单的方法,我不想这样做.

kha*_*hik 48

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

# or 

globals()['Foo']
Run Code Online (Sandbox Code Playgroud)


jh3*_*314 7

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

import sys

def str2Class(str):
    return getattr(sys.modules[__name__], str)
Run Code Online (Sandbox Code Playgroud)


use*_*ica 5

globals()[class_name]
Run Code Online (Sandbox Code Playgroud)

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