Tutorial de python – Parte 5 (Clases y funciones)

Clases y funciones

¿Que es una clase?

Una clase la podemos definir como una plantilla para la creación de objetos según un modelo predefinido.

Ya que el tema de las clases es algo extenso, si necesitas ampliar información puedes acceder desde aquí a la documentación oficial de Python.

A continuación un pequeño ejemplo de su uso.

#!/usr/bin/env python
# Definimos la clase
class Vehiculo:
  # Atributos de clases (común a todas las instancias)
  type = 'Electric'
  # Métodos de clase
  def __init__(self, speed, colour, price):
    # Atributos de la instancia (única para esa instancia)
    self.speed = speed
    self.colour = colour
    self.price = price

  # Métodos de clase
  def describe(self):
    print("Speed: {} / Color: {} / Price: {}".format(self.speed, self.colour, self.price))

  # Métodos de clase
  def changePrice(self, newPrice):
    self.price = newPrice

# Creamos una instancia usando la clase y su modelo definido
car = Vehiculo(180, 'green', 5000)
car.describe()
print("ATRIBUTO INSTANCIA.... {} (SPEED)".format(car.speed));
print("ATRIVUTO CLASE........ {} (TYPE)".format(car.type))

# Creamos una instancia usando la clase y su modelo definido
ship = Vehiculo(60, 'white', 30000)
ship.describe()
print("ATRIBUTO INSTANCIA.... {} (SPEED)".format(ship.speed));
print("ATRIBUTO CLASE........ {} (TYPE)".format(ship.type))

print('Precio coche', car.price)
car.changePrice(200000)
print('Nuevo precio coche', car.price)

En el código anterior podemos observar ciertas partes que explicaremos a continuación.

Con la palabra reservada class definimos nuestra clase y sera el nombre que usaremos para instanciar (crear) un objeto.

Dentro de la clase podemos encontrar los siguientes puntos:

  • Atributo: Son las propiedades que necesitamos para definir nuestra clase (nombre, edad, precio, etc…)
    • De clases: Son atributos comunes a la clase y a todos los objetos que se crean.
    • De instancia: Son atributos específicos a esa instancia.
  • Métodos (funciones): Son funciones definidas para esa clase.

Si continuamos revisando el código podemos ver un método llamado __init__, ese método sera nuestro inicializador o mas conocido en otros lenguajes como el método constructor.

También podemos ver como en todos los métodos se añade el parámetro self.

Ese parámetro es necesario ya que se refiere al objeto del método que está siendo llamado.

¿Que es una función?

Una función la podemos definir como un bloque de código que tiene un nombre asociado, la cual puede o no recibir argumentos y puede o no devolver un valor.

Las funciones son una parte importante de la programación y nos ofrece ciertas ventajas.

  • Modularización: Permite dividir un programa complejo en partes mas pequeñas, facilitando la programación y el depurado.
  • Reutilización: Nos permite reutilizar el mismo código en diferentes partes.

Si necesitamos crear funciones en Python usaremos la palabra reservada def.

Como ocurría con las clases, si necesitas ampliar información, desde aquí puedes acceder a la documentación oficial.

A continuación un ejemplo.

#!/usr/bin/env python
# Creamos nuestra función con los parámetros
def suma(a, b):
  return a + b

def resta(a, b):
  return a - b

def multiplicacion(a, b):
  return a * b

def division(a, b):
  return a / b;

def sumaArray(arr):
  resultado = 0
  for cont in range(0, len(arr) + 1):
    resultado += cont
  return resultado

op1 = suma(5, 5)
op2 = resta(5, 2)
op3 = multiplicacion(2, 4)
op4 = division(10, 2)
op5 = sumaArray([1,2,3,4,5,6])
print("5 + 5 = {} | 5 - 2 = {} | 2 * 4 = {} | 10 / 2 {} | suma un Array[1, 2, 3, 4, 5, 6] = {}".format(op1, op2, op3, op4, op5))

Para finalizar esta entrada explicaremos el tipo de función llamado lambda.

Una función lambda, no es mas que una pequeña función anónima. Cuando me refiero a pequeña función, es debido a que solo puede tener una expresión.

#!/usr/bin/env python
# Funciones lambda
suma = lambda a, b: a + b
resta = lambda a, b: a - b  
multiplicacion = lambda a, b: a * b  
division = lambda a, b: a / b;

op1 = suma(5, 5)
op2 = resta(5, 2)
op3 = multiplicacion(2, 4)
op4 = division(10, 2)
print("5 + 5 = {} | 5 - 2 = {} | 2 * 4 = {} | 10 / 2 {}".format(op1, op2, op3, op4))

# Un ejemplo mas interesante

def name(value):
  return lambda saludo: saludo + ' ' + value

dias = name('Ivan')
tardes = name('Ivan')
noches = name('Ivan')
print (dias('Buenos días,'))
print (tardes('Buenas tarde,'))
print (noches('Buenas noches,'))

def tabla(value):
  return lambda number: number * value

tabla1 = tabla(1)
tabla2 = tabla(2)
tabla3 = tabla(3)
tabla4 = tabla(4)
tabla5 = tabla(5)
print("1 2 3 4 5")
for cont in range(1, 11):
  print(tabla1(cont),tabla2(cont),tabla3(cont),tabla4(cont),tabla5(cont))

Con esto hemos terminado la entrada sobre clases y funciones.

En la próxima entrada veremos que son los módulos y como realizar la gestión de errores.