Fundamentos de POO para interfaces gráficas en Python

Clases y objetos

Para entender el desarrollo de interfaces gráficas es obligatorio conocer el paradigma de la programación orientada a objetos.

Este concepto se basa en la idea de simular los datos de la vida real en unas estructuras independientes y reutilizables. Los objetos tienen sus propias variables y funciones internas para manipular su contenido, conocidas como atributos y métodos respectivamente.

Python incluye un constructor base para crear objetos, se trata de la clase object:

objetos.py

objeto = object()
print(type(objeto).__name__)

La clase object por sí misma no provee ninguna funcionalidad relevante pero es la base de todas la clases en Python.

¿Pero a todo esto qué es una clase?

Pues una clase es una definición que explica como crear un nuevo tipo de dato. Esta idea se entiende mejor con el ejemplo del molde y las galletas.

Una clase es un molde para hacer galletas y las galletas son los objetos que se crean con el molde. Mirad, vamos a crear una nueva clase en Python llamada Molde, no tendrá nada todavía así que usaremos la sentencia pass para dejarla en blanco:

class Molde:
	pass

Ahora podemos crear un objeto galleta a partir de la definición de la clase Molde:

galleta = Molde()
print(type(galleta).__name__)

Al consultar el tipo de nuestra galleta vemos que se devuelve "Molde", eso es porque se ha creado siguiendo las instrucciones de la clase Molde. ¿Pero esto no tiene mucha lógica verdad? Es por eso que normalmente las clases tienen el nombre del objeto que definen, así que en lugar de Molde vamos a llamar a la clase Galleta:

class Galleta:
    pass


galleta = Galleta()
print(type(galleta).__name__)

¿Váis captando la idea? Una clase es la definición de un tipo de dato, mientras que un objeto es el resultado de crear ese dato siguiendo las instrucciones de la clase.

Los números, las cadenas, las listas... en Python todo son clases que definen estructuras de datos.

Hemos estado creando objetos todo el tiempo sin darnos cuenta y la única diferencia respecto a nuestra clase Galleta, es que ésta la hemos creado nosotros y podemos extenderla para que realice todo lo que nosotros queramos.