4

假设我有这样的课

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

  def f(self):
    #dostuff

我有字符串“我的班级”

str = "my class"

我可以做这个:

class_name_from_str = str.title().replace(" ", "") # now class_name_from_str is "MyClass"

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

callable_obj = some_process(class_name_from_str)
o = callable_obj(arg1, arg2)
o.f()

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

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

my_calls_dict = {'my class' : MyClass, 'my other class' : MyOtherClass}
4

1 回答 1

6

这有点取决于您的班级所在的位置。如果它在当前模块中

globals()[class_name]

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

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

于 2012-12-30T21:27:28.073 回答