Esta escribiendo una respuesta demasiado larga para llegar al punto de tu pregunta.
self (o cualquier otro nombre que le quieras dar), es una referencia a la misma instancia de la clase.
Vamos a ver un ejemplo:
Supón que tienes la siguiente clase Perro (Dog), tienes un constructor que recibe un nombre (name) y un método ladra (bark) que no recibe ningún parámetro.
Código Python:
Ver originalclass Dog:
def __init__(self, name):
self.name = name
def bark(self):
return "%s: woof woof" % (self.name,)
Ahora hacemos uso de la clase Dog
Código Python:
Ver originalalpha_dog = Dog("fido")
beta_dog = Dog("rufu")
print fido.bark()
print rufu.bark()
Como puedes ver la clase Dog es como una plantilla para las instancias. Pero como puede diferenciar python (u otros lenguajes) sobre que instancia esta trabajando? Esto es fácil cuando se mantiene una referencia en este caso self.