<jupyter_start><jupyter_text>Clases  Hecho por: <NAME>ata __Introducción__Las clases se tratan de estructuras de software que resuelven problemas complejos. Se componen de _métodos_ y _propiedades_ (también llamados _"atributos"_). Emplean la filosofía de _"divide y vencerás"_ para la solución de problemas.  Figura 1. Filosofía _"divide y vencerás"_. Fuente: [Khan Academy](https://es.khanacademy.org/computing/computer-science/algorithms/merge-sort/a/divide-and-conquer-algorithms)  __1. Generalidades de una clase__Cuando se habla de una _clase_, se habla directamente de Programación Orientada a Objetos (OOP, por sus siglas en inglés). Las clases son las estructuras con las que se pueden elaborar y crear objetos. Un _objeto_ se define como una instancia de una clase. Las clases se componen de:* _Métodos:_ funciones que permiten discretizar (subdivir) un problema es una serie de tareas. Emplean variables _locales_ que sólo pueden ser utilizadas dentro del método.* _Atributos:_ se trata de variables que se consideran _globales_ en la clase. Se pueden utilizar dentro de los métodos.La estructura _básica_ de una clase es la siguiente:```class nombre_clase():  def metodo1(self, entradas):    (desarrollo)    return salidas  def metodo2(self, entradas):    (desarrollo)    return salidas``` Ejemplo: Clase calculadoraSe define como _calculadora_ un objeto que permite realizar, por lo menos, las cuatro operaciones básicas: suma, resta, multiplicación y división.<jupyter_code>#Estructura general de la calculadora
class calculadora():
  def suma(self, nums):
    s = 0
    for i in nums:
      s += i
    return s
  def resta(self, nums):
    pass
  def division(self, nums):
    pass
  def mult(self, nums):
    pass<jupyter_output><empty_output><jupyter_text>Con la clase `Calculadora`, puedes crear objetos con los cuales desarrollar las operaciones básicas. Por ejemplo:<jupyter_code>#Puedes almacenar la clase en una variable y utilizar sus métodos
c = calculadora()   #La vaiable 'c' es, ahora, un objeto.
c.suma([1,2])<jupyter_output><empty_output><jupyter_text>1.1. AtributosLos atributos se refieren a las variables consideradas _"globales"_ dentro de una clase. Estas variables pueden ser utilizadas dentro de los métodos de las clases.<jupyter_code>class Animal:
  #Atributos
  nombre = ""
  edad = 0
  peso = 0

  def Informacion(self, nombre, edad, peso):
    self.nombre = nombre
    self.edad = edad
    self.peso = peso

#---Fin de la clase---

#Crear animal
perro = Animal();

#Definición de atributos
perro.Informacion("Skipper", 10, 12);

print(perro.nombre + " tiene " + str(perro.edad) + " años y pesa " + str(perro.peso) + " kg.");<jupyter_output><empty_output><jupyter_text>1.3. ConstructorEl constructor es un _método especial_ de una clase que permite realizar un desarrollo particular apenas se crea el objeto. Emplea la siguiente estructura:```  def __init__ (self, entradas):    (desarrollo)```Puedes emplear objetos que sean _"inicializados"_ con información de interés. Por ejemplo: para el desarrollo de una clase de inventarios, sería útil que al momento de crear el objeto, ya tenga identificados los insumos del negocio.<jupyter_code>class Animal:
  #Atributos
  nombre = ""
  edad = 0
  peso = 0

  def __init__(self, nombre, edad, peso):
    self.nombre = nombre
    self.edad = edad
    self.peso = peso

#Animales...
perro = Animal("Skipper", 10, 5)
gato = Animal("Lorenzo", 4, 3)

print(perro.nombre + " es un perro y " + gato.nombre + " es un gato.")<jupyter_output><empty_output><jupyter_text>__3. Ejercicios__ _Ejemplo:_ Clase _Empleados_Elabora una clase que permita categorizar los empleados de una empresa. Debe contener:_Atributos:_1. Nombre.2. Edad.3. Cargo.4. Salario._Métodos:_1. Constructor $\rightarrow$ inicializa los atributos.2. `asenso` $\rightarrow$ permite modificar el cargo y el salario de un trabajador.3. `Imprimir` $\rightarrow$ imprime los datos del empleado.<jupyter_code><jupyter_output><empty_output><jupyter_text>3.1. Clase _Círculo_Elabora una clase que contenga:_Atributos:_1. Radio del círculo._Métodos:_1. Constructor $\rightarrow$ inicializa el valor del radio.2. `area` $\rightarrow$ retorna el área del círculo.3. `perimetro` $\rightarrow$ retorna el perímetro del círculo.<jupyter_code><jupyter_output><empty_output><jupyter_text>3.2. Clase _Estudiante_La clase debe contener:_Atributos:_1. Nombre.2. Edad.3. Calificación._Métodos:_1. Constructor $\rightarrow$ define el nombre de la persona y su edad.2. `calificacion` $\rightarrow$ define la calificación del estudiante.3. `resumenFinal` $\rightarrow$ define si el estudiante aprobó o reprobó el curso (se aprueba con nota mayor a 3.0).<jupyter_code><jupyter_output><empty_output><jupyter_text>3.3. Clase _Bancaria_Elabora una clase de _Banco_ que contenga:_Atributos:_1. Capital del banco (todo el dinero que contiene la entidad).2. Dirección.3. Número de empleados._Métodos:_1. Contructor $\rightarrow$ incializa las variables.2. `dir` $\rightarrow$ establece la dirección del vídeo.3. `contratar` $\rightarrow$ contrata un nuevo empleado.4. `despedir` $\rightarrow$ despide un empleado.<jupyter_code><jupyter_output><empty_output><jupyter_text>3.4. Clase _financiera_Tienes una base de datos de la información bancaria de diferentes personas, en ella se resumen los movimientos financieros. | Persona | Fecha | Movimiento || ------- | ----- | ---------- ||  | 01/02/2010 | $+\$5'000.000$ || __Juan__ | 15/03/2010 | $-\$3'000.000$ ||  | 24/04/2010 | $+\$500.000$ || | | || | | || | 05/01/2010 | $-\$3'000.000$ || __Federico__ | 8/02/2010 | $-\$1'000.000$ | |  | 13/03/2010 | $+\$200.000$ |Elabora una clase que contenga:_Atributos:_1. Movimientos de los clientes._Métodos:_1. Constructor $\rightarrow$ inicializa la base de datos de movimientos.2. `promedio` $\rightarrow$ permite retornar el promedio de una lista numérica.3. `categoriaRiesgo` $\rightarrow$ retorna el nivel de riesgo al que pertenezca un cliente. Niveles de riesgo1. __Alto riesgo__: la entidad bancaria no brinda un préstamo. A esta categoría pertenecen las personas que tengan un saldo negativo de movimientos.2. __Riesgo medio__: personas con un balance promedio de movimientos menor a $+\$10'000.000$.3. __Riesgo bajo__: personas con un balance promedio de movimientos mayor o igual a $+\$10'000.000$.<jupyter_code><jupyter_output><empty_output><jupyter_text>3.5. Carrito de comprasElabora una clase que permita simular una aplicación de E-commerce destinada a la venta de ropa._Lista de productos:_| Producto | Precio de venta | Costo de inversión | | -------- | --------------- | ------------------ || __Jeans__    | $\$200.000$     | $\$120.000$    || __Camisa polo__ | $\$99.000$      | $\$50.000$  || __Vaqueros__  | $\$220.000$    | $\$125.000$    |La clase debe contener los siguientes métodos:1. Agregar elementos a la lista de compras.2. Cálculo del total de compra.3. Remover un elemento.4. Limpiar el carrito de compras.5. Calcular utilidades.<jupyter_code><jupyter_output><empty_output><jupyter_text>3.6. Clase _persona_Estás trabajando en el desarrollo de tu propia red social. Deseas crear una clase _persona_ que contenga los siguientes atributos y métodos:_Atributos:_1. Información personal: nombre, edad y estado civil, entre otros.2. Lista de gustos e intereses.3. Información de usuario: nombre de usuario y contraseña._Métodos:_1. Contraseña de usuario: cambiarla cuando el usuario la solicite.2. Registro de gusto: el usuario pueda definir gustos e intereses.3. Cambiar información personal: que el usuario pueda decir qué información actualizar.<jupyter_code><jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.1034618410700236, 'fraction_numerical': 0.02858641489640703, 'mean_word_length': 4.583455344070278, 'pattern_counts': {'":': 0, '<': 46, '<?xml version=': 0, '>': 46, 'https://': 1, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '11', 'dir': 'jupyter-structured-clean-dedup', 'id': '379715', 'license': 'MIT', 'n_tokens_mistral': 2793, 'n_tokens_neox': 2687, 'n_words': 849, 'path': 'Python/Colab/ClasesPython.ipynb', 'repo_name': 'judrodriguezgo/DesarrolloWeb', 'size': '7642'}