title: clarification/when/where to use super in django/python
body: <p>Actually we know <code>super</code> is used to find the "parent class" and return its object, something like/using <code>self.__class__.__mro__</code></p>
  
  <p>What I was confused about is <em>when to use it exactly?</em></p>
  
  <p>Suppose we have a Example model code as below</p>
  
  <p><strong>version_1</strong></p>
  
  <pre><code>class Example(models.Model):
      name = models.CharField()
      age  = models.IntegerField()
  
      def save(self, **args, **kwargs):
          obj = super(Example, self).save(self, **args, **kwargs)
          obj.name = "name changed"
          obj.age = "age changed"
          return obj
  </code></pre>
  
  <p><strong>version_2</strong></p>
  
  <pre><code>class Example(models.Model):
      name = models.CharField()
      age  = models.IntegerField()
  
      def save(self, **args, **kwargs):
          self.name = "name changed"
          self.age = "age changed"
          obj = super(Example, self).save(self, **args, **kwargs)
          return obj
  </code></pre>
  
  <p>so as we can observe above </p>
  
  <p>In <strong>version_1</strong> I have called <code>super</code> first and done modifications to fields and returned the obj</p>
  
  <p>In <strong>version_2</strong> I had modified the fields and after that called super and returned obj</p>
  
  <p>So what happens when super is called before and after modification of fields?</p>
  
  <p>Finally what i want to know/confirm is</p>
  
  <ul>
  <li>Where/why exactly super is used in django forms/models.</li>
  <li>What is the exact concept of using them in django / python (if I understood this wrong).</li>
  </ul>