我有下一个情况。以下方法的目标是返回从传入字符串创建的对象。所以我有:
class Situation(Generator):
pass
父类中的方法:
class Generator(object):
def createsituation(self, stringsituation="situation"):
return "Instance of Situation"
传入的字符串总是等于字符串“situation”。在python中可以吗?
答案 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