title: Anything wrong with a really large __init__?
body: <p>I'm writing a Python program with a GUI built with the Tkinter module. I'm using a class to define the GUI because it makes it easier to pass commands to buttons and makes the whole thing a bit easier to understand.</p>
  
  <p>The actual initialization of my GUI takes about 150 lines of code. To make this easier to understand, I've written the <code>__init__</code> function like so:</p>
  
  <pre><code>def __init__(self, root):
      self.root = root
      self._init_menu()
      self._init_connectbar()
      self._init_usertree()
      self._init_remotetree()
      self._init_bottom()
  </code></pre>
  
  <p>where <code>_init_menu()</code>, <code>_init_connectbar()</code>, and so on do all the initialization work. This makes my code easier to follow and prevents <code>__init__</code> from getting too big.</p>
  
  <p>However, this creates scope issues. Since an Entry widget that I defined in <code>_init_connectbar()</code> is in the function scope and is not a class attribute, I can't refer to it in other methods in the class.</p>
  
  <p>I can make these problems go away by doing most of the initialization in <code>__init__</code>, but I'll lose the abstraction I got with my first method.</p>
  
  <p>Should I expand <code>__init__</code>, or find another way to bring the widgets into class scope?</p>