title: How can I delegate to the __add__ method of a superclass?
body: <p>Say I have this class:</p>
  
  <pre><code>class MyString(str):
      def someExtraMethod(self):
          pass
  </code></pre>
  
  <p>I'd like to be able to do</p>
  
  <pre><code>a = MyString("Hello ")
  b = MyString("World")
  (a + b).someExtraMethod()
  ("a" + b).someExtraMethod()
  (a + "b").someExtraMethod()
  </code></pre>
  
  <ol>
  <li><p>Running as is:</p>
  
  <pre><code>AttributeError: 'str' object has no attribute 'someExtraMethod'
  </code></pre></li>
  <li><p>Obviously that doesn't work. So I add this:</p>
  
  <pre><code>def __add__(self, other):
      return MyString(super(MyString, self) + other)
  def __radd__(self, other):
      return MyString(other + super(MyString, self))
  </code></pre>
  
  
  
  <pre><code>TypeError: cannot concatenate 'str' and 'super' objects
  </code></pre></li>
  <li><p>Hmmm, ok. <code>super</code> doesn't appear to respect operator overloading. Perhaps:</p>
  
  <pre><code>def __add__(self, other):
      return MyString(super(MyString, self).__add__(other))
  def __radd__(self, other):
      return MyString(super(MyString, self).__radd__(other))
  </code></pre>
  
  
  
  <pre><code>AttributeError: 'super' object has no attribute '__radd__'
  </code></pre></li>
  </ol>
  
  <p>Still no luck. What should I be doing here?</p>