python从字符串

时间:2015-06-04 21:17:56

标签: python string class

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

class Situation(Generator):
    pass

父类中的方法:

class Generator(object):
    def createsituation(self, stringsituation="situation"):
        return "Instance of Situation"

传入的字符串总是等于字符串“situation”。在python中可以吗?

2 个答案:

答案 0 :(得分:2)

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

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

classes = {'situation': Situation}

您可以通过创建类装饰器来自动执行此操作,可能是:

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

@register
class Situation(Generator):
    # ...

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

或者您可以使用globals() function获取模块中所有全局变量的字典。后者有点......过度杀伤并且还有安全隐患,你可能最终会给最终用户提供比你讨价还价更多的访问权限,因为这也为他们提供了你并不意味着暴露的其他类和功能。

获得字典后,只需访问正确的课程并调用它:

class Generator(object):
    def createsituation(self, stringsituation="situation"):
        return classes[stringsituation]()

答案 1 :(得分:0)

如果我理解正确,你想从Generator的创建方法创建Situation对象。所以你需要在Situation类中使用相应的构造函数,并将传递的字符串作为参数。代码中的细微变化将实现这一目标:

pip install -e setup.py