从名称实例化 Python 类

新手上路,请多包涵

所以我有一组类和一个带有其中一个类名的字符串。如何根据该字符串实例化一个类?

 class foo:
  def __init__(self, left, right):
     self.left = left
     self.right = right

str = "foo"
x = Init(str, A, B)

我希望 x 成为类 foo 的实例。

原文由 klynch 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 377
2 个回答

如果您知道涉及的名称空间,则可以直接使用它——例如,如果所有类都在模块 zap 中,则字典 vars(zap) 就是该名称空间;如果它们都在当前模块中, globals() 可能是获取该字典的最简便方法。

如果类不都在同一个命名空间中,那么构建一个“人工”命名空间(一个专用字典,类名作为键,类对象作为值),正如@Ignacio 所建议的,可能是最简单的方法。

原文由 Alex Martelli 发布,翻译遵循 CC BY-SA 2.5 许可协议

在您的情况下,您可以使用类似的东西:

 get_class = lambda x: globals()[x]
c = get_class("foo")

从模块中获取类甚至更容易:

 import somemodule
getattr(somemodule, "SomeClass")

原文由 Radagast 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏