title: What's the point of @staticmethod in Python?
body: <p>I've developed this short test/example code, in order to understand better how static methods work in Python.</p>
  
  <pre><code>class TestClass:
      def __init__(self, size):
          self.size = size
  
      def instance(self):
          print("regular instance method - with 'self'")
  
      @staticmethod
      def static():
          print("static instance method - with @staticmethod")
  
      def static_class():
          print("static class method")
  
  
  a = TestClass(1000)
  
  a.instance()
  a.static()
  TestClass.static_class()
  </code></pre>
  
  <p>This code works correctly, it doesn't return any errors. My questions are:</p>
  
  <ol>
  <li><p>Do I understand correctly that "self" can be understood as something like "this method will be called from an instance"?</p></li>
  <li><p>Then again, what's the logic behind @staticmethod - is it to create static methods which can be called from an instance? Isn't that exactly <em>not</em> what static methods are about?</p></li>
  <li><p>Why would the second approach be favored over the third one? (I assume that since the decorator exists, there is a point to this.) The 3rd option seems to be the simpler and more straightforward.</p></li>
  </ol>