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

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Objetos imprimen None
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Objetos imprimen None  (Leído 3,173 veces)
Locura_23

Desconectado Desconectado

Mensajes: 162



Ver Perfil
Objetos imprimen None
« en: 10 Enero 2023, 01:08 am »

Buenas, una duda, resulta que estoy intentando diseñar una clase en Python pero cada vez que imprimo los objetos se me agrega
un None que no consigo ver de dónde sale...
Todo está en un mismo archivo
Por cierto, estoy empezando en este lenguaje por lo tanto tal vez ignore alguna práctica que sea más recomendable...

La clase es la siguiente y abajo el main.

Código
  1. class Producto:
  2.    contador_productos = 0
  3.    def __init__(self,nombre: str, precio: float):
  4.        self._id = Producto._generar_id()
  5.        self._nombre = nombre
  6.        self._precio = self._verificar_precio(precio)
  7.  
  8.    @staticmethod
  9.    def _generar_id():
  10.        Producto.contador_productos += 1
  11.        return Producto.contador_productos
  12.  
  13.    def obtener_id(self):
  14.        return self._id
  15.  
  16.    def obtener_nombre(self):
  17.        return self._nombre
  18.  
  19.    def obtener_precio(self):
  20.        return self._precio
  21.  
  22.    def _verificar_precio(self,precio):
  23.        if precio > 0:
  24.            return precio
  25.        else:
  26.            return -1
  27.  
  28.    def imprimir_producto(self):
  29.        print(f'{self._id}, {self._nombre}, {self._precio}')
  30.  

Código
  1. def main():
  2.    a = Producto("Mouse",1700)
  3.    b = Producto("Teclado",8000)
  4.    c = Producto("Monitor",15000)
  5.  
  6.    print(a.obtener_id(), a.obtener_nombre(), a.obtener_precio())
  7.    print(b.obtener_id(), b.obtener_nombre(), b.obtener_precio())
  8.    print(c.obtener_id(), c.obtener_nombre(), c.obtener_precio())
  9.  
  10.    print(a.imprimir_producto())
  11.    print(b.imprimir_producto())
  12.    print(c.imprimir_producto())
  13.  
  14. if __name__ == '__main__':
  15.    main()
  16.  

salida:

1 Mouse 1700
2 Teclado 8000
3 Monitor 15000
1, Mouse, 1700
None
2, Teclado, 8000
None
3, Monitor, 15000
None


En línea

MCKSys Argentina
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.465


Diviértete crackeando, que para eso estamos!


Ver Perfil
Re: Objetos imprimen None
« Respuesta #1 en: 10 Enero 2023, 01:25 am »

Hola!

Prueba reemplazando el print con return imprimir_producto (quita los paréntesis de la función)

Saludos!


En línea

MCKSys Argentina

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

Locura_23

Desconectado Desconectado

Mensajes: 162



Ver Perfil
Re: Objetos imprimen None
« Respuesta #2 en: 10 Enero 2023, 01:48 am »

Es cierto, era un problema en esa función jaja gracias genio
se solucionó así

Código
  1.    def imprimir_producto(self):
  2.        return f'{self._id}, {self._nombre}, {self._precio}'
  3.  
En línea

reymosquito

Desconectado Desconectado

Mensajes: 81


Ver Perfil
Re: Objetos imprimen None
« Respuesta #3 en: 10 Enero 2023, 05:01 am »

veamos:
1)que raro que usas return en casi todas las funciones y justo esa tiene un print. Es un error pésimo usar funciones sin que retornen algo, de ahí el none.
2) está bien que estás empezando con el lenguaje pero hay muchas cosas innecesarias, muchas faltantes y lo peor una mala lógica en lo que esperas lograr, por ejemplo imaginate que tenés que agregar miles de productos, no sirve declararlos como lo estás haciendo, para eso existe como mínimo los nodos y los árboles, aunque es otro tema anda viendo otra forma de hacer lo mismo.
3)tengo un ratito y como estoy aburrido cambiaré algunas cosas para ver si te sirven de guía:
Código
  1. class Producto:
  2.    contador_productos = 0
  3.    def __init__(self,nombre: str, precio: float):
  4.        self._id = Producto._generar_id()
  5.        self._nombre = nombre
  6.        self._precio = self._verificar_precio(precio)
  7.  
  8.    @staticmethod
  9.    def _generar_id():
  10.        Producto.contador_productos += 1
  11.        return Producto.contador_productos
  12.  
  13.    def __str__(self):
  14.        return f'{self._id},{self._nombre},{self._precio}'
  15.  
  16.    def _verificar_precio(self,precio):
  17.        return precio if precio > 0 else  -1
  18.  
  19. def main():
  20.    a = Producto("Mouse",1700)
  21.    b = Producto("Teclado",8000)
  22.    c = Producto("Monitor",15000)
  23.  
  24.    print(f"""{a._id},{a._nombre},{a._precio}
  25. {b._id},{b._nombre},{b._precio}
  26. {c._id},{c._nombre},{c._precio} \n""")
  27.  
  28.    print(f"{a}\n{b}\n{c}")
  29.  
  30. if __name__ == '__main__':
  31.    main()
  32.  


Donde obtenés lo mismo, agregando solo una función y eliminando varias,
obviamente los print del main son repetitivos ya que ambos obtienen lo mismo,
pero como dije antes es una muy mala idea la forma en que estas creando los objetos.
En línea

Locura_23

Desconectado Desconectado

Mensajes: 162



Ver Perfil
Re: Objetos imprimen None
« Respuesta #4 en: 10 Enero 2023, 19:45 pm »

Sí desde luego no está pensado para que se pueda implementar en un sistema, es solo una práctica. Pero aún así entiendo las observaciones que hiciste, saludos!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Como se imprimen los libros?
Diseño Gráfico
coolfrog 2 7,643 Último mensaje 27 Julio 2008, 19:36 pm
por wodaza
Impresoras que no imprimen
Hardware
cadencia 4 3,032 Último mensaje 19 Junio 2010, 18:22 pm
por APOKLIPTICO
No se imprimen los datos almacenados en un archivo
Programación C/C++
BJM 1 1,677 Último mensaje 23 Noviembre 2012, 04:03 am
por durasno
Imprimen el primer coche en 3D
Noticias
wolfbcn 5 2,668 Último mensaje 23 Mayo 2013, 20:37 pm
por NXS
Imprimen un coche eléctrico
Noticias
wolfbcn 0 1,451 Último mensaje 13 Febrero 2015, 01:54 am
por wolfbcn
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines