elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Únete al Grupo Steam elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Método duplicado en herencia con python.-
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Método duplicado en herencia con python.-  (Leído 3,935 veces)
El mas antiguo

Desconectado Desconectado

Mensajes: 103



Ver Perfil
Método duplicado en herencia con python.-
« en: 28 Septiembre 2022, 15:51 pm »

Hola gente ¿como estan?.
Una simple pregunta ¿puedo  hacer que de los 2 metodos
hacer lo mismo con solo uno?.-
Bueno es todo, espero que no lo borren porque me esta
costando con la POO y estas que debe ser una cosa simple
para Uds. para mi es mucho, gracias...

Código
  1. class Automovil():
  2.    def __init__(self, ruedas, puertas):
  3.        self.ruedas = ruedas
  4.        self.puertas = puertas
  5.  
  6.    def mostrar(self):
  7.        print(f"ruedas...: {a.ruedas}\npuertas..: {a.puertas}")    
  8.  
  9.  
  10. class Audi(Automovil):
  11.    def __init__(self, ruedas, puertas, color, modelo):
  12.        super().__init__(ruedas, puertas)
  13.        self.color = color
  14.        self.modelo = modelo
  15.  
  16.    def mostrar(self):
  17.        print(f"\nruedas...: {b.ruedas}\npuertas..: {b.puertas}\ncolor....: {b.color}\nmodelo...: {b.modelo}")
  18.  
  19.  
  20. a = Automovil(ruedas=4, puertas=5)
  21. a.mostrar()
  22. b = Audi(ruedas=4, puertas=4, color='azul', modelo=2020)
  23. b.mostrar()


Slds. Daniel ☕☕☕


En línea

MCKSys Argentina
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.518


Diviértete crackeando, que para eso estamos!


Ver Perfil
Re: Método duplicado en herencia con python.-
« Respuesta #1 en: 28 Septiembre 2022, 16:46 pm »

Hola!

No entiendo tu pregunta. Podrías reformularla?

Saludos!


En línea

MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."

El mas antiguo

Desconectado Desconectado

Mensajes: 103



Ver Perfil
Re: Método duplicado en herencia con python.-
« Respuesta #2 en: 28 Septiembre 2022, 16:52 pm »

Hola, gracias por ocuparte
Hacer de estos 2 métodos uno solo...

Código
  1.    def mostrar(self):
  2.        print(f"ruedas...: {a.ruedas}\npuertas..: {a.puertas}")  
  3.  
  4.  
  5.    def mostrar(self):
  6.        print(f"\nruedas...: {b.ruedas}\npuertas..: {b.puertas}\ncolor....: {b.color}\nmodelo...: {b.modelo}")


Slds. Daniel ☕☕☕
En línea

MCKSys Argentina
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.518


Diviértete crackeando, que para eso estamos!


Ver Perfil
Re: Método duplicado en herencia con python.-
« Respuesta #3 en: 28 Septiembre 2022, 17:18 pm »

No soy experto en python (aunque "programo" todos los días en el lenguaje), pero puedes hacer lo siguiente:

Código
  1. class Automovil():
  2.    def __init__(self, ruedas, puertas):
  3.        self.ruedas = ruedas
  4.        self.puertas = puertas
  5.  
  6.    def mostrar(self):
  7.        print(f"ruedas...: {a.ruedas}\npuertas..: {a.puertas}")
  8.  
  9.  
  10. class Audi(Automovil):
  11.    def __init__(self, ruedas, puertas, color, modelo):
  12.        # Prefiero este tipo de llamado a 'super' por ser compatible con python 2.7
  13.        super(Audi, self).__init__(ruedas=ruedas, puertas=puertas)
  14.        # super().__init__(ruedas, puertas)
  15.        self.color = color
  16.        self.modelo = modelo
  17.  
  18.    def mostrar(self):
  19.        # print(f"\nruedas...: {b.ruedas}\npuertas..: {b.puertas}\ncolor....: {b.color}\nmodelo...: {b.modelo}")
  20.        print(f"\n") # Esto es para agregar una linea
  21.        super(Audi, self).mostrar() # Llama a mostrar de la clase padre para que imprima ruedas y puertas
  22.        print(f"color....: {b.color}\nmodelo...: {b.modelo}") # Imprime los atributos agregados en Audi (color y modelo)
  23.  
  24.  
  25. a = Automovil(ruedas=4, puertas=5)
  26. a.mostrar()
  27. b = Audi(ruedas=4, puertas=4, color='azul', modelo=2020)
  28. b.mostrar()
  29.  

Eso es si quieres agregar atributos en la clase Audi.

En tu caso, agregaría los atributos de color y modelo a la clase Automovil y agregaría otro atributo llamado 'marca' que tendría uno de los valores en las marcas soportadas (puedes crear constantes con los valores de cada marca y asignarlo en dicho atributo).

Saludos!
En línea

MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."

reymosquito

Desconectado Desconectado

Mensajes: 81


Ver Perfil
Re: Método duplicado en herencia con python.-
« Respuesta #4 en: 28 Septiembre 2022, 19:50 pm »

hay varias formas de hacer  esto, pero me parece oportuno aclararte  algunos conceptos que si bien no están mal, es mejor hacerlos de otra forma.
Código
  1. class Automovil():
  2.    def __init__(self, ruedas, puertas):
  3.        self.ruedas = ruedas
  4.        self.puertas = puertas
  5.  
  6.    def mostrar(self):
  7.        return(f"""ruedas...: {self.ruedas}
  8. puertas..: {self.puertas}""")

1) es una buena práctica usar return en las funciones sino después está la típica pregunta de ¿por qué sale un None ? las funciones deben, aunque no es obligatorio retornar algo
2)cambié la forma de mostrar la cadena, solo porque me parece mucho más claro la lectura
3)self no es una palabra reservada, pero por convención es la más usada, sobre todo porque en códigos extensos y también para otros programadores es más simple la comprensión del código, lo mismo para uno en el paso del tiempo.
4)Si bien este ejemplo es una forma de compartir métodos para mostrar los atributos se usa mucho más el método __str__() en lugar de difinir uno propio.



Código
  1. class Audi(Automovil):
  2.    def __init__(self, ruedas, puertas, color, modelo):
  3.        Automovil.__init__(self,ruedas, puertas)
  4.        self.color = color
  5.        self.modelo = modelo
  6.  
  7.    def mostrar(self):
  8.        return(f"""{Automovil.mostrar(self)}
  9. color....: {self.color}
  10. modelo...: {self.modelo}""")

como dije, se puede, ya que no es obligatorio hacer de otras formas, aunque en este caso no es necesario usar super, ya que directamente invoco al método __init__ de la clase padre.

Código
  1. a = Automovil(4,5)
  2. print(a.mostrar())
  3. b = Audi(4,4, 'azul',2020)
  4. print(b.mostrar())

como me gusta escribir poco simplemente declaro los atributos.

Con respecto a lo de duplicados no lo son, ya que cada clase tiene sus propios atributos.
« Última modificación: 28 Septiembre 2022, 19:52 pm por reymosquito » En línea

El mas antiguo

Desconectado Desconectado

Mensajes: 103



Ver Perfil
Re: Método duplicado en herencia con python.-
« Respuesta #5 en: 29 Septiembre 2022, 14:17 pm »

Muchas veces dije que se aprende mas en un buen
foro que con un manual, gracias rey...

Slds. Daniel ☕☕☕
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[Python] invocar metodo desde metodo.
Scripting
Hesp 2 7,331 Último mensaje 8 Marzo 2009, 00:38 am
por Hesp
[AYUDA][PYTHON] Necesito ayuda con el metodo SEARCH del modulo RE de python
Scripting
Noxware 2 4,150 Último mensaje 24 Mayo 2014, 16:11 pm
por Noxware
Duda Con Herencia y metodo staticos
PHP
Yorshdelaselva 1 2,533 Último mensaje 28 Marzo 2017, 20:28 pm
por mchojrin
se puede llamar el metodo de la clase superior en herencia mulltinivel?
Java
Pedro122h 1 2,586 Último mensaje 27 Abril 2022, 14:25 pm
por rub'n
Dudas con herencia en python.
Scripting
El mas antiguo 4 2,778 Último mensaje 24 Septiembre 2022, 15:13 pm
por El mas antiguo
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines