title: TypeError: toString() Missing 1 required positional argument: 'self'
body: <p>So I wrote a small project to practice objects:</p>
  
  <pre><code>import random
  import os
  import sys
  
  class Animal:
      __name = ""
      __height = 0
      __weight = 0
      __sound = 0
  
      def __init__(self, name, height, weight, sound):
          self.__name = name
          self.__height = height
          self.__weight = weight
          self.__sound = sound
  
  
      def set_name(self, name):
          self.__name = name
  
      def get_name(self):
          return self.__name
  
      def set_height(self, height):
          self.__height = height
  
      def get_height(self):
          return self.__height
  
      def set_weight(self, weight):
          self.__weight = weight
  
      def get_weight(self):
          return self.__weight
  
      def set_sound(self, sound):
          self.__sound = sound
  
      def get_sound(self):
          return self.__sound
  
      def get_type(self):
          print("animal")
  
      def toString(self):
          return "{} is {} cm tall and {} kilograms and says {}".format(self.__name,
                                                                       self.__height,
                                                                       self.__weight,
                                                                       self.__sound)
  
  cat = Animal('Whiskers', 33, 7, 'Meow')
  
  print(cat.toString())
  
  class Dog(Animal):
      __owner = ""
      def __init__(self, name, height, weight, sound, owner):
          self.__owner = owner
          super(Dog, self).__init__(name, height, weight, sound)
  
      def set_owner(self, owner):
          self.__owner = owner
  
      def get_owner(self):
          return self.__owner
  
      def get_type(self):
          print("Dog")
  
      def toString(self):
          return "{} is {} cm tall and {} kilograms and says {}. His owner is {}".format(self.__name,
                                                                                  self.__height,
                                                                                  self.__weight,
                                                                                  self.__sound,
                                                                                  self.__owner)
  
  pitbull = Dog('James', 70, 30, 'woef', 'john')
  print(Dog.toString())
  </code></pre>
  
  <p>It outputs</p>
  
  <pre><code>Whiskers is 33 cm tall and 7 kilograms and says Meow
  
      Traceback (most recent call last):
        File "C:/Users/*****/AppData/Local/Programs/Python/Python36-32/practice object oriented programming.py", line 78, in &lt;module&gt;
          print(Dog.toString())
      TypeError: toString() missing 1 required positional argument: 'self'
  </code></pre>
  
  <p>why is this? It output the cat correctly even though I didn't define 'self'. Why doesn't it output dog correctly? I have tried multiple things I found here, but I have defined the function and I didn't have to define 'self' with the cat. Any help would be appreciated. Thanks</p>