title: How to monkey patch a `__call__` method?
body: <p>I don't seem to be able to monkey patch a <code>__call__</code> method of class instance (and yes, I want to patch just single instances, not all of them).</p>
  
  <p>The following code:</p>
  
  <pre><code>class A(object):
      def test(self):
          return "TEST"
  
      def __call__(self):
          return "EXAMPLE"
  
  a = A()
  print("call method: {0}".format(a.__call__))
  print("test method: {0}".format(a.test))
  a.__call__ = lambda : "example"
  a.test = lambda : "test"
  print("call method: {0}".format(a.__call__))
  print("test method: {0}".format(a.test))
  
  print(a())
  print("Explicit call: {0}".format(a.__call__()))
  print(a.test())
  </code></pre>
  
  <p>Outputs this:</p>
  
  <pre><code>call method: &lt;bound method A.__call__ of &lt;__main__.A object at 0x7f3f2d60b6a0&gt;&gt;
  test method: &lt;bound method A.test of &lt;__main__.A object at 0x7f3f2d60b6a0&gt;&gt;
  call method: &lt;function &lt;lambda&gt; at 0x7f3f2ef4ef28&gt;
  test method: &lt;function &lt;lambda&gt; at 0x7f3f2d5f8f28&gt;
  EXAMPLE
  Explicit call: example
  test
  </code></pre>
  
  <p>While I'd like it to output:</p>
  
  <pre><code>...
  example
  Explicit call: example
  test
  </code></pre>
  
  <p><strong>How do I monkeypatch <code>__call__()</code>? Why I can't patch it the same way as I patch other methods?</strong></p>
  
  <p>While <a href="https://stackoverflow.com/a/14590308/462370">this answer</a> tells how to do it (supposedly, I haven't tested it yet), it doesn't explain the <em>why</em> part of the question.</p>