假设我有一个这样的课程
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}
答案 0 :(得分:5)
这取决于你的班级所在的位置。如果它在当前模块中
globals()[class_name]
应该让你上课。如果它在模块中,则将globals()替换为模块(可能通过__import__()
导入 - 如果您希望模块名称也是动态的)。
这是考虑这是否是一个好主意的好时机。例如,制作一个名字和相应类别的词典会不会更清楚?如果您的.title().strip()
内容是您实际代码的一部分,我真的无法想到它可能会尝试做什么。