根据名称实例化Python类
我有一组类,还有一个包含其中一个类名的字符串。我该如何根据这个字符串来创建一个类的实例呢?
class foo:
def __init__(self, left, right):
self.left = left
self.right = right
str = "foo"
x = Init(str, A, B)
我想让x成为类foo的一个实例。
6 个回答
8
在编程中,有时候我们会遇到一些问题,特别是在使用某些工具或库的时候。这些问题可能会让我们感到困惑,不知道该如何解决。比如,有人可能在使用某个特定的功能时,发现它并没有按照预期的方式工作。这种情况下,我们可以去一些技术论坛,比如StackOverflow,寻求帮助。
在这些论坛上,很多人会分享他们的经验和解决方案。你可以看到其他人遇到的类似问题,以及他们是如何解决的。这不仅能帮助你找到答案,还能让你学到更多的知识。
总之,遇到问题时,不要害怕寻求帮助,利用好这些资源,可以让你的编程之路更加顺利。
classdict = {'foo': foo}
x = classdict['foo'](A, B)
31
在你的情况下,你可以使用类似这样的代码:
get_class = lambda x: globals()[x]
c = get_class("foo")
而且从模块中获取类会更简单:
import somemodule
getattr(somemodule, "SomeClass")
20
如果你知道涉及到的命名空间,可以直接使用它。例如,如果所有的类都在模块 zap
中,那么字典 vars(zap)
就是那个命名空间;如果它们都在当前模块中,使用 globals()
可能是获取那个字典最方便的方法。
如果这些类不在同一个命名空间,那么按照 @Ignacio 的建议,构建一个“人工”命名空间(也就是用类名作为键、类对象作为值的专用字典)可能是最简单的办法。