subclases metodos hijas funcion ejemplos clases clase python inheritance constructor super

metodos - super clases python



¿Qué es un ejemplo básico de herencia única usando la palabra clave super() en Python? (2)

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 es que puedo) usar super () en este contexto para eliminar el código duplicado?


Asumiendo que quiere que la clase Bar 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. Ver por ejemplo, super considerado dañino . 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


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).