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中可能吗?
您可以轻松地将字符串映射到类,是的。类只是更多的对象,您可以将它们存储在其他 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)
| 归档时间: |
|
| 查看次数: |
3351 次 |
| 最近记录: |