我正在尝试编写可扩展的 Python 代码来实现几种不同的优化算法。我在面向对象编程方面不是很有经验,所以我的问题可能措辞不正确,但我认为我正在努力在我的代码中设置继承和/或多态性。
我希望能够根据用户输入在几种不同的优化算法之间进行选择。我的第一个想法是编写一个 Optimizer 类,它将包含所有公共(public)信息,然后为每个继承 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 文件中的“方法”字段,生成的优化器具有正确的行为。
执行此操作的最佳方法是什么,这样我在添加新方法时就不必回去重写一堆 switch 语句?
谢谢!
请您参考如下方法:
我有 article正是针对这个主题。
简而言之,您最好预先声明用户输入如何映射到类中。为此,您可以使用:
- 显式映射
- 动态类名生成
- 注册表和类装饰器
- 自定义元类
- 初始化子类钩子(Hook)
有关详细信息,请阅读我在上面提到的文章。
