Foros Python

Versión completa: Dudas con clases en python.
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Hola, ¿cómo están?
Es mi primer programa de práctica con la poo y me surgen 2 dudas, la primera, es coherente la creación del objeto dentro del bucle, no logro crearlo antes del mismo, por más que le pase los parámetros me da error y lo segundo ¿ qué debo cambiar para mejorarlo y aprender ?. -
Tengo claro que debo validar que los ingresos sean correctos, pero lo hice de esa manera para que sea más fácil para Uds. ayudarme. 

Código:
#23/04/2018 mi primer programa con clases

class calculos():
    def __init__(self, oprUno, oprDos):
         self.oprUno = oprUno
         self.oprDos = oprDos

    def suma(self):
         return float(self.oprUno) + float(self.oprDos)

    def resta(self):
         return float(self.oprUno) - float(self.oprDos)

    def divide(self):
         return float(self.oprUno) / float(self.oprDos)

    def multiplica(self):
         return float(self.oprUno) * float(self.oprDos)

    def modulo(self):
         return int(self.oprUno) % int(self.oprDos)


Código:
from calculos import*

while True:
    oprUno = input('\n Ingrese primer  operando...: ')
    oprDos = input('\n Ingrese segundo operando...: ')

    opc = input('\n 1 - Suma \n 2 - Resta \n 3 - Divide'
                '\n 4 - Multiplica \n 5 - Módulo'
                '\n\n Ingrese opción....:')

    calc = calculos(oprUno, oprDos)

    if opc == '1':
         print(f'\n {oprUno} + {oprDos} = {calc.suma()}')
    elif opc == '2':
         print(f'\n {oprUno} - {oprDos} = {calc.resta()}')
    elif opc == '3':
         print(f'\n {oprUno} / {oprDos} = {calc.divide()}')
    elif opc == '4':
         print(f'\n {oprUno} * {oprDos} = {calc.multiplica()}')
    elif opc == '5':
         print(f'\n {oprUno} % {oprDos} = {calc.modulo()}')

    opc = input('\n 1 - Continua \n 2 - Finaliza'
                '\n\n Ingrese opción...:')
    if opc != '1':
         break

Desde ya muchas gracias por el tiempo que le dediquen. 
Saludos.
Hola Daniel. Tu código está correcto. Para mejorar podrías chequear estas cuestiones:
  • Las clases por convención se nombran con el estilo CamelCase. Por ende debería llamarse Calculos.
  • No son necesarios los paréntesis luego de la definición de la clase si no especificas ninguna clase padre.
  • Ya que solo estás importando un objeto, es mejor que en lugar de emplear un asterisco utilices from calculos import Calculos.
En cuanto a la creación de la instancia dentro del bucle, no hay problema. Pero si quisieras crear el objeto primero, podrías hacer:

Código:
calc = Calculos(None, None)

while True:
    # (...)
    calc.oprUno = oprUno
    calc.oprDos = oprDos

Aunque insisto en que tu solución es más adecuada para el caso.

Saludos!
Ok. Francisco, ya tome nota de lo que propones.

Saludos