title: what's are the differences between the following ways of executing a method?
body: <p>so I stumbled upon two ways of executing a method of class on object:</p>
  <pre><code>class A:
     def good(self):
          print(&quot;good&quot;)
  
  class B:
     def goodi(self):
        print(&quot;good&quot;)
  
  
  a = A()
  a.good() #way1
  A.good(a) #way2
  </code></pre>
  <p>so it all works fine, though when doing for example:</p>
  <pre><code>B.goodi(a)
  </code></pre>
  <p>it will work. but when doing:</p>
  <pre><code>a.goodi()
  </code></pre>
  <p>it will fail.</p>