Herencia en Python

written by uve 2 October 2010

Voy a explicar muy brevemente como podemos hacer herencia en Python, aunque realmente es la cosa más tonta que hay en el mundo. Lo primero es crear una clase base:

class Coche(object):
    def __init__(self, marca):
        self.marca = marca
        print "Coche:", marca

A partir de aquí podemos crear las clases hijas:

class Audi(Coche):
    pass

class Seat(Coche):
    pass

class Toyota(Coche):
    pass

Ahora ya podemos crear instancias de las clase que acabamos de crear:

a5 = Audi('Audi')
ibiza = Seat('Seat')
auris = Toyota('Toyota')

Podemos ver, que por defecto se llama al constructor de la clase base, es decir, Coche. Pero, ¿qué pasa si queremos personalizar los constructores?

class Seat(Coche):
    def __init__(self, modelo):
        super(Seat, self).__init__('Seat')
        self.modelo = modelo
        print "Modelo:", modelo

seat = Seat('Ibiza')

Aún así, se puede instanciar objetos de la clase Coche. Esto puede ser interesante o puede que no nos interese dar esta opción. En caso de que deseemos hacer una clase base abstracta, podemos hacer lo siguiente:

class Coche(object):
    def __init__(self, marca):
        if isinstance(self, Coche):
            raise NotImplementedError('No se puede instanciar la clase Coche')
        self.marca = marca
        print "Coche:", marca

try:
    coche = Coche('Mi marca')
except NotImplementedError:
    print 'No, no, ...'

Tags

La teoría es cuando crees saber algo, pero no funciona.
La práctica es cuando algo funciona, pero no sabes por qué.
Los programadores combinan la teoría y la práctica:
Nada funciona y no saben por qué.