title: Instantiate different class based on user input
body: <p>I am trying to write an extensible python code to implement several different optimization algorithms.  I am not very experienced in object oriented programming, so my question may be worded incorrectly, but I think I am struggling with setting up inheritance and/or polymorphism in my code.  </p>
  
  <p>I want to be able to chose between several different optimization alogrithms based on user input.  My first inclination was to write a Optimizer class, which would hold all of the common info, then have specific classes for each algorithms which inherit the Optimizer class.  ie.</p>
  
  <pre><code>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
  </code></pre>
  
  <p>I quickly realized that you need to know which method you are going to use before initializing the optimizer.  This isn't the end of the world, but it seems cleaner to parse the user input in the initialization of the optimizer object.  I would like to be able to initialize the optimizer with something like:</p>
  
  <pre><code>optimizer = Optimizer(user_input)
  </code></pre>
  
  <p>with the resulting optimizer having the correct behavior based on a 'method' field embedded in the user_input file.</p>
  
  <p>What is the best way to do this such that I don't have to go back a re-write a bunch of switch statements when I add a new method?</p>
  
  <p>Thanks!</p>