¿Cuál es un ejemplo básico de herencia simple usando la palabra clave super () en Python?

Digamos que tengo las siguientes clases configuradas:

class Foo: def __init__(self, frob, frotz): self.frobnicate = frob self.frotz = frotz class Bar: def __init__(self, frob, frizzle): self.frobnicate = frob self.frotz = 34 self.frazzle = frizzle 

¿Cómo puedo (si puedo) usar super () en este contexto para eliminar el código duplicado?

En Python> = 3.0, así:

 class Foo(): def __init__(self, frob, frotz) self.frobnicate = frob self.frotz = frotz class Bar(Foo): def __init__(self, frob, frizzle) super().__init__(frob, 34) self.frazzle = frizzle 

Lea más aquí: http://docs.python.org/3.1/library/functions.html#super

EDITAR: Como se dijo en otra respuesta, a veces solo usar Foo.__init__(self, frob, 34) puede ser la mejor solución. (Por ejemplo, cuando se trabaja con ciertas formas de herencia múltiple).

Suponiendo que desea que la Barra de clase establezca el valor 34 dentro de su constructor, esto funcionaría:

 class Foo(object): def __init__(self, frob, frotz): self.frobnicate = frob self.frotz = frotz class Bar(Foo): def __init__(self, frob, frizzle): super(Bar, self).__init__(frob, frizzle) self.frotz = 34 self.frazzle = frizzle bar = Bar(1,2) print "frobnicate:", bar.frobnicate print "frotz:", bar.frotz print "frazzle:", bar.frazzle 

Sin embargo, super presenta sus propias complicaciones. Véase, por ejemplo, súper considerado perjudicial . Para completar, aquí está la versión equivalente sin super .

 class Foo(object): def __init__(self, frob, frotz): self.frobnicate = frob self.frotz = frotz class Bar(Foo): def __init__(self, frob, frizzle): Foo.__init__(self, frob, frizzle) self.frotz = 34 self.frazzle = frizzle bar = Bar(1,2) print "frobnicate:", bar.frobnicate print "frotz:", bar.frotz print "frazzle:", bar.frazzle