title: `reduce(add,...)` vs `sum(...)`, why the second fails on a list of objects
body: <p>I have the expectation that <code>reduce(add,lst)</code> and <code>sum(lst)</code> should give me the same result, but</p>
  
  <pre><code>In [18]: class p():
      def __init__(self, x, y):
          self.x=x ; self.y=y
      def __repr__(self):
          return "(%r,%r)"%(self.x,self.y)
      def __add__(self, P):
          return p(self.x+P.x, self.y+P.y)
     ....:     
  In [19]: pts=[p(1,0), p(2,1), p(-3,4)]
  In [20]: from operator import add
  In [21]: print reduce(add,pts)
  (0,5)
  In [22]: print sum(pts)
  ---------------------------------------------------------------------------
  TypeError                                 Traceback (most recent call last)
  &lt;ipython-input-22-98a81789d257&gt; in &lt;module&gt;()
  ----&gt; 1 print sum(pts)
  TypeError: unsupported operand type(s) for +: 'int' and 'instance'
  In [23]: 
  </code></pre>
  
  <p>of course I'm not understanding something, possibly obvious; could someone enlighten me?</p>