title: Registering an implementation of abc without adding it to mro
body: <p>I am trying to understand the usefulness of the method register of abc.ABCMeta.
  To my understanding, after reading <a href="https://docs.python.org/3/library/abc.html" rel="nofollow noreferrer">https://docs.python.org/3/library/abc.html</a>:</p>
  
  <p>the following code:</p>
  
  <pre><code>class MyFoo(Complex): ...
      MyFoo.register(Real)
  </code></pre>
  
  <p>will create the class MyFoo which implements the Complex abstract class.
  After registering the MyFoo with Real, the isinstance and issubclass will return as if MyFoo was derived from Real.
  What I don't understand is why the Real, doesn't get added to the mro.</p>
  
  <p>I am asking since the following code will not behave as I would have expected:</p>
  
  <pre><code>def trunc(inst):
      if isinstance(inst, Real):
          return inst.__trunc__() #this should generate error since Complex doesn't have the __trunc__ attr
      else:
          return NotImplemented
  
  trunc(MyFoo())
  </code></pre>
  
  <p>Shouldn't I have as a given that when isinstance returns true, then the underlying object should have all the characteristics of the class that it's checked against?</p>
  
  <p>Note, if it's not obvious, i quite new to the language so please bear with me.</p>