title: How to make threading.Thread's start() call a method other than run()
body: <p>I have a class which has two methods <code>run()</code> and <code>run_forever()</code>, the latter calling the former repeatedly. I would like to run <code>run_forever()</code> for different instances of the class on separate threads, but so far I haven't been able to deviate from <code>threading.Thread</code>'s default behavior of calling <code>run()</code>.</p>
  
  <p>Here is a simplified version of what I'm trying to achieve:</p>
  
  <pre><code>import time
  import threading
  
  class Controller(object):
      def run(self):
          print("Running once...")
  
      def run_forever(self):
          while True:
              self.run()
              time.sleep(1)
  
  class ThreadController(Controller, threading.Thread):
      def __init__(self, *args, **kwargs):
          Controller.__init__(self, *args, **kwargs)
          threading.Thread.__init__(self, target=self.run_forever)
  
  if __name__ == "__main__":
      thread_controller = ThreadController()
      thread_controller.start()
      thread_controller.join()
  </code></pre>
  
  <p>If I run this script, it prints <code>Running once...</code> once, and doesn't continue to print it every second like I intended by setting <code>target=self.run_forever</code> in the initialization of <code>threading.Thread</code>. How might I modify this code to achieve the desired behavior?</p>