title: Why does Python use 'magic methods'?
body: <p>I've been playing around with Python recently, and one thing I'm finding a bit odd is the extensive use of 'magic methods', e.g. to make its length available, an object implements a method, <code>def __len__(self)</code>, and then it is called when you write <code>len(obj)</code>.</p>
  
  <p>I was just wondering why objects don't simply define a <code>len(self)</code> method and have it called directly as a member of the object, e.g. <code>obj.len()</code>? I'm sure there must be good reasons for Python doing it the way it does, but as a newbie I haven't worked out what they are yet.</p>