title: Why do we use @staticmethod?
body: <p>I just can't see why do we need to use @staticmethod. Let's start with an exmaple.</p>
  
  <pre><code>class test1:
      def __init__(self,value):
          self.value=value
  
      @staticmethod
      def static_add_one(value):
          return value+1
  
      @property
      def new_val(self):
          self.value=self.static_add_one(self.value)
          return self.value
  
  
  a=test1(3)
  print(a.new_val) ## &gt;&gt;&gt; 4
  
  
  
  class test2:
      def __init__(self,value):
          self.value=value
  
      def static_add_one(self,value):
          return value+1
  
      @property
      def new_val(self):
          self.value=self.static_add_one(self.value)
          return self.value
  
  
  b=test2(3)
  print(b.new_val) ## &gt;&gt;&gt; 4
  </code></pre>
  
  <p>In the example above, the method, <code>static_add_one</code> , in the two classes do not require the instance of the class(self) in calculation. </p>
  
  <p>The method <code>static_add_one</code> in the class <code>test1</code> is decorated by <code>@staticmethod</code> and work properly. </p>
  
  <p>But at the same time, the method <code>static_add_one</code> in the class <code>test2</code> which has no <code>@staticmethod</code> decoration also works properly by using a trick that provides a <code>self</code> in the argument but doesn't use it at all.</p>
  
  <p>So what is the benefit of using <code>@staticmethod</code>? Does it improve the performance? Or is it just due to the zen of python which states that "<em>Explicit is better than implicit</em>"?</p>