title: How a method call works in Python, and significance of bound methods
body: <p>I have a basic question on how a method call really works in Python. I found <a href="https://stackoverflow.com/questions/50848237/clarification-on-a-paragraph-in-the-python-tutorial-documentation">this post</a> and <a href="https://stackoverflow.com/questions/114214/class-method-differences-in-python-bound-unbound-and-static">this one</a> that are helpful, but not answering all my questions.</p>
  <p>Basically, my understanding from <a href="https://docs.python.org/3/tutorial/classes.html#method-objects" rel="nofollow noreferrer">Section 9.3.4 of Python documentation</a> is that:</p>
  <p>When an <em><strong>instance object</strong></em> calls its method, a search is done on the <em><strong>class object</strong></em>. If the matching function is found, the <em><strong>function object</strong></em> attached to the <em><strong>class object</strong></em> is called with the <em><strong>instance object</strong></em> as its first parameter.</p>
  <p>My main questions are:</p>
  <ul>
  <li><p>What is the significance of bound methods? Currently, a call to method is transferred to a call to function with the <strong>instance object</strong> as its first argument enabling the function to access the <strong>instance object</strong>. Why has Python adopted this approach, instead of each method directly processing its bound <strong>instance object</strong>? Any cons and pros for each of these approaches?</p>
  </li>
  <li><p>Can a bound method theoretically lead to a lower performance (slower execution), in case that a large number of instances call their own method simultaneously, which is seemingly equivalent to calling one single <strong>function object</strong> multiple times (in a serial fashion??) with different instances as the first argument per call?</p>
  </li>
  </ul>
  <p>I know I am missing some fundamentals here, and I would be grateful if anyone could please advise. Thank you for your time.</p>