[MÚSICA] [MÚSICA] En este video tutorial, veremos algunos ejemplos de cómo crear y utilizar clases en Python. Presentaremos un ejercicio que consta de dos partes. En este video tutorial lo resolveremos. SerÃa conveniente que lo resuelvas antes de ver el video, para poder comparar la resolución que hiciste con la propuesta del video. Cabe destacar que hay muchas formas de modelar, con lo cual aunque las resoluciones sean distintas, pueden estar bien ambas. El enunciado del ejercicio está subido en los rescursos del curso. En la primera parte del enunciado nos pide que modelemos una cantidad de dinero, por ejemplo, un peso, un dólar, un euro, etcétera. Veamos el modelo propuesto. Creamos una clase, currency, que representa la moneda. Por ahora tendrá un nombre y un sÃmbolo. El método INIT se llama cuando se inicializa la clase. En este método se definen las variables instancia. Por ejemplo, la clase Currency tiene dos variables instancia. La variable name y la variable symbol. La función REPR se llama cuando se quiere mostrar el objeto en pantalla, por ejemplo cuando se imprime en la consola. Abajo vemos dos instancias de currency, una es el objeto dólar y otra el objeto pesos argentinos. Por otro lado definimos la clase money, que representa una cantidad de dinero. Esta clase tiene dos variables instancia, la variable amount y la variable currency. Abajo vemos la creación de dos instancias de money, el objeto un dólar y el objeto un peso argentino. Si importamos el módulo en la terminal podemos ver cada una de las instancias. Por ejemplo, somos from classes_1, importamos todo el módulo y vemos que tiene la variable dólar y la variable pesos. Vemos que lo que se imprime en pantalla es lo que está definido en Repr, que es el nombre. Luego vemos que tiene la variable one dollar y la variable one pesos. Hasta ahora estas clases no hacen nada, asà como están no tienen mucha razón de ser, solo guardan datos que perfectamente se podrÃan guardar en una estructura de datos como un diccionario o una tupla porque no saben responder ningún mensaje particular. Ahora veamos la segunda parte del ejercicio que nos da más información para ver qué mensaje deben saber responder. En esta parte del ejercicio se nos pide agregar la posibilidad al modelo de sumar y restar dos cantidades de dinero. Además, poder multiplicar una cantidad de dinero por un número y dividir una cantidad de dinero por un número. Por ejemplo, se debe poder hacer un peso más un peso, un dólar más un dólar, un peso más un dólar, un dólar más un peso, un peso menos un dólar, un dólar menos un peso, un dólar por diez y diez dólares dividido a dos. Veamos los cambios propuestos para soportar la funcionalidad requerida. Para que un objeto sepa responder a los operadores suma, resta, multiplicación y división, se deben definir los métodos mágicos add, sub, mul y truediv respectivamente. Veamos primero el caso de la suma. Pensemos un primer caso. Si queremos sumar dos cantidades de dinero correspondientes a la misma moneda, alcanzarÃa con sumar los montos de cada uno y devolver una cantidad de dinero con el monto resultado, pero ¿qué pasa si queremos sumar dos cantidades de dinero de distintas monedas? Por ejemplo, si queremos sumar un peso más un dólar. Entonces tenemos que tener una moneda de referencia como base y el resto de las monedas será una proporción de ese valor base. De esta manera, antes de operar, debo convertir la cantidad de dinero a la moneda de referencia y operar con los valores en el mismo tipo de moneda. Y luego convertir la cantidad de dinero de la moneda de referencia a la moneda que tengo que devolver el resultado. Para realizar estas conversiones, la clase currency define dos mensajes, convert_ amount_ to_ base_currency, que recibe un número que representa un monto en la moneda, es decir, el objeto que recibe el mensaje y devuelve otro número que representa el monto en la moneda base. Y el mensaje convert_amount_from_base_currency, que hace la operación inversa, recibe un número que representa un monto en la moneda base y devuelve un número, que representa un monto en la moneda actual, es decir, el objeto donde se está evaluando el método. Para implementar estos métodos se agregará una variable instancia, la variable factor, que indica la proporción de la moneda con respecto a la moneda base. Entonces la conversión a la moneda base es una multiplicación del número recibido por la variable factor y la inversa es la división del número recibido por la variable factor. Entonces la función suma queda de la siguiente manera, sumo los montos convertidos a la moneda base y luego al resultado lo convierto a la moneda que debe devolverse, que es la moneda correspondiente al objeto que recibe el mensaje. Notar que se devuelve una nueva cantidad de dinero. No se modifica el objeto que recibe el mensaje. En este caso los objetos son inmutables. La resta es similar. Se restan los valores convertidos a la moneda base y luego se convierte el resultado a la moneda del objeto que recibe el mensaje. La multiplicación y la división son más sencillas, porque es por un número. Entonces simplemente tengo que multiplicar el monto por el número recibido y devolver la cantidad de dinero resultante. Lo mismo pasa con la división. Veamos cómo queda la creación de las instancias. La que cambió es la creación de las instancias de los objetos currency. En este caso, se le pasa también la proporción con respecto a la moneda base. Entonces la relación entre el dólar y la moneda base serÃa uno a uno y la relación entre los pesos argentinos y la moneda base serÃa 1,40. Veamos algunos ejemplos en la terminal. Para eso importo, el módulo classes_ 2 y ahora vamos a hacer, un peso más un peso me da dos pesos. Un peso más un dólar me da 41 pesos. Un dólar más un dólar me da dos dólares y un dólar más un peso me da uno con 0,25, dólar. Después vamos a hacer un dólar menos un peso, me da 0,975 dólares y luego voy a hacer un dólar menos un dólar, me da cero dólares. Después vamos un dólar por diez, me da diez dólares y a esto vamos a dividirlo por dos. Me da cinco dólares. Hemos visto un ejemplo de creación de clases para representar una cantidad de dinero que permite sumar, restar, multiplicar y dividir cantidades de dinero. [MÚSICA]