IIC2233 / syllabus-2019-2

Repositorio oficial del curso IIC2233 Programación Avanzada 🎉🎊 2019-2
38 stars 56 forks source link

Heredar parcialmente #130

Closed pazanelli closed 5 years ago

pazanelli commented 5 years ago

al usar herencia de clases, se pueden heredar algunos atributos de la Superclase? Por ejemplo, si se tiene una superclase "Mueble", puede ser que una subclase "Lampara" no tenga todos los atributos de mueble (ej, que no tenga patas , no que tenga 0 patas). Además, puede ser que la subclase tenga un atributo que se ingrese al instanciarlo y que no sea parte de la superclase (ej. color): class Mueble: def __init__(self, patas, material, peso): self.patas = patas self.material = material self.peso = peso class Lampara(Mueble): def __init__(self,material, peso, color): Mueble.__init__(self, material, peso) self.color = color

jacouyoumdjian commented 5 years ago

Hola pazanelli!

Por un lado, respondiendo a tu primera pregunta, no se puede. La idea de heredar, es que heredas (valga la redundancia) todos los atributos de tu clase madre (piénsalo así como que dado que eres hijo, como que si o si tienes todos atributos de tu madre). Es por esto que al crear, y luego instanciar, la clase Lampara que hereda de Mueble, te va a lanzar un error debido a que no estás asignando todos sus atributos. Vale decir, un error del tipo "init() missing 1 required positional".

Por otra parte, la clase hija si puede tener un atributo nuevo que no tenga la clase madre. De nuevo, ahí también está la gracia de la herencia; que la clase hija "contiene" a su clase madre y algo más (que puede ser un nuevo atributo o método). Espero que se entienda!

Saludos!