title: Class that inherits from `list` loses type after addition
body: <p>I'm working with a class that inherits from <code>list</code>:</p>
  <pre><code>class MyList(list):
      def func(self):
          print(self)
  </code></pre>
  <p>And trying to use some of <code>list</code>'s built-in <code>__add__</code> method to concatenate two lists:</p>
  <pre><code>A = MyList([1,2,3])
  B = MyList([4,5,6])
  C = A + B
  </code></pre>
  <p>Now, the type of C will revert to <code>list</code>:</p>
  <pre><code>type(A)
  &gt;&gt;&gt;&gt;__main__.MyList
  
  type(C)
  &gt;&gt;&gt;&gt;list
  </code></pre>
  <p>and as such, the new method <code>func</code> is no longer accessible.
  I've found that using <code>__iadd__</code> behaves as expected:</p>
  <pre><code>B += A
  type(B)
  &gt;&gt;&gt;&gt;__main__.MyList
  </code></pre>
  <p>Any ideas why this happens, and what can I do to work around that?</p>