Я пытаюсь написать расширяемый код 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)
с полученным оптимизатором, имеющим правильное поведение, основанное на поле 'method', встроенном в файл user_input.
Каков наилучший способ сделать это так, чтобы мне не нужно было переписывать кучу операторов switch, когда я добавляю новый метод?
Спасибо!