python从字符串创建对象

ovo*_*vod 2 python string class

我有下一个情况。以下方法的目标是返回从传入字符串创建的对象。所以我有:

class Situation(Generator):
    pass
Run Code Online (Sandbox Code Playgroud)

以及父类中的方法:

class Generator(object):
    def createsituation(self, stringsituation="situation"):
        return "Instance of Situation"
Run Code Online (Sandbox Code Playgroud)

传入的字符串始终等于字符串“情况”。在python中可能吗?

Mar*_*ers 5

您可以轻松地将字符串映射到类,是的。类只是更多的对象,您可以将它们存储在其他 Python 对象中。

您可以手动构建将字符串映射到类的字典:

classes = {'situation': Situation}
Run Code Online (Sandbox Code Playgroud)

你可以通过创建一个类装饰器来自动化一点,也许:

classes = {}
def register(cls):
    classes[cls.__name__.lower()] = cls
    return cls

@register
class Situation(Generator):
    # ...
Run Code Online (Sandbox Code Playgroud)

您前缀的每个类@register都将添加到字典中,类名小写作为键。

或者您可以使用该globals()函数获取模块中所有全局变量的字典。后者有点......矫枉过正,也是一个安全隐患,您最终可能会为最终用户提供比您讨价还价更多的访问权限,因为这也为他们提供了您不想公开的其他类和功能。

一旦你有了字典,只需访问正确的类并调用它:

class Generator(object):
    def createsituation(self, stringsituation="situation"):
        return classes[stringsituation]()
Run Code Online (Sandbox Code Playgroud)