【问题标题】:Construct a callable object from a string representing its name in Python从 Python 中表示其名称的字符串构造一个可调用对象
【发布时间】:2012-12-15 05:04:58
【问题描述】:

假设我有这样的课程

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}

【问题讨论】:

    标签: python-2.7 callable


    【解决方案1】:

    这在某种程度上取决于您的班级所在的位置。如果在当前模块中

    globals()[class_name]
    

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-12-13
      • 1970-01-01
      • 2023-03-29
      • 1970-01-01
      • 2022-04-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多