title: Python: must __init__(self, foo) always be followed by self.foo = foo?
body: <p>I've been striving mightily for three days to wrap my head around <code>__init__</code> and "self", starting at Learn Python the Hard Way exercise 42, and moving on to read parts of the Python documentation, <a href="http://www.freenetpages.co.uk/hp/alan.gauld/" rel="nofollow noreferrer">Alan Gauld's chapter on Object-Oriented Programming</a>, <a href="https://stackoverflow.com/questions/2709821/python-self-explained">Stack threads like this one on "self"</a>, <a href="https://stackoverflow.com/questions/674600/python-init-and-self-confusion">and this one</a>, and frankly, I'm getting ready to hit myself in the face with a brick until I pass out. </p>
  
  <p>That being said, I've noticed a really common convention in initial <code>__init__</code> definitions, which is to follow up with (self, foo) and then immediately declare, within that definition, that self.foo = foo. </p>
  
  <p>From LPTHW, ex42: </p>
  
  <pre><code>class Game(object): 
      def __init__(self, start): 
          self.quips = ["a list", "of phrases", "here"]
          self.start = start
  </code></pre>
  
  <p>From Alan Gauld: </p>
  
  <pre><code>def __init__(self,val): self.val = val
  </code></pre>
  
  <p>I'm in that horrible space where I can see that there's just One Big Thing I'm not getting, and I it's remaining opaque no matter how much I read about it and try to figure it out. Maybe if somebody can explain this little bit of consistency to me, the light will turn on. Is this because we need to say that "foo," the variable, will always be equal to the (foo) parameter, which is itself contained in the "self" parameter that's automatically assigned to the def it's attached to? </p>