title: Access child methods in Python Django
body: <p>I have a real life case that can be solved using polymorphism like in <code>Java</code> Where we can create a list of objects that belongs to the same type. However each object might have an override or extra fields. </p>
  
  <pre><code>class Animal(models.Model):
      name = models.CharField(max_length=30)
  
      def speak(self):
          return "I am an animal"
  
  
  class Cat(Animal):
  
      def speak(self):
          """ OVERRIDE """
          return "MEAOO"
  
  
  class Dog(Animal):
  
      def speak(self):
          """ OVERRIDE """
          return "WOOOOF"
  </code></pre>
  
  <p>What I need now is to get all the animals but let each animal to use it's speak method. I was not able to to do that as below.</p>
  
  <pre><code>&gt;&gt;&gt; c = Cat(name="MyCAT")
  &gt;&gt;&gt; c.save()
  &gt;&gt;&gt; d = Dog(name="MyDOG")
  &gt;&gt;&gt; d.save()
  &gt;&gt;&gt; animals = Animal.objects.all()
  &gt;&gt;&gt; animals
  [&lt;Animal: Animal object&gt;, &lt;Animal: Animal object&gt;]
  &gt;&gt;&gt; for a in animals:
  ...     a.speak()
  ... 
  'I am an animal'
  'I am an animal'
  &gt;&gt;&gt; 
  </code></pre>
  
  <p>To me the output should be like the below</p>
  
  <pre><code>'MEAOO'
  'WOOOOF'
  </code></pre>
  
  <p>Is there anyway to do a similar thing in Django? </p>