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

时间:2012-12-30 21:23:44

标签: python-2.7 callable

假设我有一个这样的课程

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,一个好的解决方案是创建一个dict来映射带有类的字符串

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

1 个答案:

答案 0 :(得分:5)

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

globals()[class_name]

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

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