根据用户输入实例化不同的类

时间:2018-09-11 18:25:22

标签: python design-patterns

我正在尝试编写可扩展的python代码以实现几种不同的优化算法。我在面向对象编程方面经验不是很丰富,所以我的问题的措词可能不正确,但是我认为我在代码中设置继承和/或多态性方面感到很挣扎。

我希望能够根据用户输入在几种不同的优化算法之间进行选择。我的第一个倾向是编写一个Optimizer类,该类将保存所有公共信息,然后为每个继承Optimizer类的算法都具有特定的类。即。

class Optimizer:
    def __init__(self, user_input):
        pass

class Method1(Optimizer):
    def__init__(self, user_input):
        pass
    def run()
        pass

class Method2(Optimizer):
    def__init__(self, user_input):
        pass
    def run()
        pass

我很快意识到,在初始化优化器之前,您需要知道要使用哪种方法。这不是世界末日,但是在优化器对象的初始化中解析用户输入似乎更干净。我希望能够使用类似以下内容来初始化优化器:

optimizer = Optimizer(user_input)

根据嵌入在user_input文件中的“ method”字段,使生成的优化程序具有正确的行为。

做到这一点的最佳方法是什么,以免在添加新方法时不必重新编写一堆switch语句?

谢谢!

1 个答案:

答案 0 :(得分:0)

我有article恰好解决了这个话题。

简而言之,您最好预先声明用户输入如何映射到类中。为此,您可以使用:

  • 显式映射
  • 动态类名生成
  • 注册表和类装饰器
  • 自定义元类
  • 初始化子类挂钩

有关更多详细信息,请阅读我上面提到的文章。