title: Why does python use two underscores for certain things?
body: <p>I'm fairly new to actual programming languages, and Python is my first one. I know my way around Linux a bit, enough to get a summer job with it (I'm still in high school), and on the job, I have a lot of free time which I'm using to learn Python.</p>
  
  <p>One thing's been getting me though. What exactly is different in Python when you have expressions such as</p>
  
  <pre><code>x.__add__(y) &lt;==&gt; x+y
  x.__getattribute__('foo') &lt;==&gt; x.foo
  </code></pre>
  
  <p>I know what methods do and stuff, and I get what they do, but my question is: How are those double underscore methods above different from their simpler looking equivalents?</p>
  
  <p>P.S., I don't mind being lectured on programming history, in fact, I find it very useful to know :) If these are mainly historical aspects of Python, feel free to start rambling.</p>