从Python中表示其名称的字符串构造可调用对象

Jor*_*alo 4 callable python-2.7

假设我有一个这样的课程

class MyClass(AnotherClass):
  def __init__(self, arg1, arg2):
    self.arg1 = arg1
    self.arg2 = arg2

  def f(self):
    #dostuff
Run Code Online (Sandbox Code Playgroud)

我有字符串"我的班级"

str = "my class"
Run Code Online (Sandbox Code Playgroud)

我可以做这个:

class_name_from_str = str.title().replace(" ", "") # now class_name_from_str is "MyClass"
Run Code Online (Sandbox Code Playgroud)

我怎么能让class_name_from_str可调用?我想要这样的东西:

callable_obj = some_process(class_name_from_str)
o = callable_obj(arg1, arg2)
o.f()
Run Code Online (Sandbox Code Playgroud)

顺便说一句,我正在使用Python 2.7

更新:正如Matti Virkkunen在评论中建议的那样,一个好的解决方案是创建一个dict来映射字符串和类

my_calls_dict = {'my class' : MyClass, 'my other class' : MyOtherClass}
Run Code Online (Sandbox Code Playgroud)

Mat*_*nen 6

这取决于你的班级所在的位置.如果它在当前模块中

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

应该让你上课.如果它在模块中,则将globals()替换为模块(可能通过以下方式导入__import__()- 如果您希望模块名称也是动态的).

这是考虑这是否是一个好主意的好时机.例如,制作一个名字和相应类别的词典会不会更清楚?如果你的.title().strip()东西是你的实际代码的一部分,我真的不能想到它可能会尝试做什么.