Seamos elegantes: cómo crear módulos y clases con Python

En los lenguajes informáticos orientados a objetos como Python, las clases son básicamente una plantilla para crear sus propios objetos. Los objetos son una encapsulación de variables y funciones en una sola entidad. Los objetos obtienen sus variables y funciones de las clases.

¿Que qué?

Aquí hay algunos ejemplos que lo ayudarán a comprender: siga leyendo. También hay un shell de código interactivo, simplemente presione el botón "Ejecutar" en la parte superior de la ventana específica.

La forma más sencilla de describir las clases y cómo usarlas es la siguiente:

Imagina que tienes grandes poderes. Creas una especie ("clase").

Luego, crea atributos para esa especie ("propiedades"): altura, peso, extremidades, color, poderes, etc.

Luego creas una instancia de esa especie: Fido el perro, Drogon de Game of Thrones, etc. Entonces trabajas con estas instancias:

  • En un juego, por ejemplo, participaban en la acción, interactuaban utilizando sus atributos.
  • En una aplicación bancaria, serían las diferentes transacciones.
  • En una aplicación de compra / venta / intercambio / arrendamiento de vehículos, la clase de vehículo podría generar subclases como los automóviles. Cada uno tendría atributos como kilometraje, opciones, características, color y acabado.

Ya puede ver por qué esto es útil. Está creando, reutilizando, adaptando y mejorando elementos de una manera muy eficiente, lógica y útil.

A estas alturas, probablemente te hayas dado cuenta de que esta es una forma de clasificar y agrupar, similar a cómo aprenden los humanos:

  • Los animales son seres vivos que no son humanos ni árboles, en un sentido básico.
  • luego pasas a diferentes tipos de animales: los perros, los gatos son probablemente los primeros animales de los que la mayoría de nosotros aprendimos
  • luego pasas a diferentes atributos de los animales: formas, tamaños, sonidos, apéndices, etc.

Por ejemplo, cuando eras niño, tu primera comprensión de un perro probablemente fue algo con cuatro patas que ladraba. Luego aprendiste a distinguir que algunos eran perros reales, otros eran juguetes. Que este concepto de "perro" contenía muchos tipos.

Crear y usar clases es básicamente:

  • crear una plantilla para poner "cosas" en: una clasificación
  • que luego se puede operar. Por ejemplo, buscar a todas las personas con perros que podría solicitar que se vinculen a un blog sobre mascotas, o todos los clientes bancarios que podrían ser buenos prospectos para una nueva tarjeta de crédito.

El punto principal aquí es que las clases son objetos que pueden producir instancias de esas plantillas, en las que se pueden aplicar operaciones y métodos. Es una excelente manera de conceptualizar, organizar y construir una jerarquía para cualquier organización o proceso.

A medida que nuestro mundo se vuelve más complejo, esta es una forma de imitar esa complejidad desde una perspectiva jerárquica. También desarrolla una comprensión más profunda de los procesos e interacciones para entornos comerciales, técnicos y sociales desde un punto de tecnología de la información virtual.

Un ejemplo podría ser un videojuego que crees. Cada personaje puede ser una "clase", con sus propios atributos, que interactúa con instancias de otras clases. El Rey Jorge de la clase "Rey" puede interactuar con Court Jester Funnyman de la clase "Clown", y así sucesivamente. Un Rey podría tener una clase de "sirviente" real, y una clase de "sirviente" siempre tendría una clase de "Rey", por ejemplo.

Esto es lo que haremos:

  • crea una clase y úsala
  • crear un módulo y mover la creación y el inicio de la clase al módulo
  • llamar al módulo en un nuevo programa para usar la clase

El código está disponible en GitHub aquí.

#TSB - Create Class in Python - rocket positions (x,y) and graph
#some items and comments bolded to call attention to processimport matplotlib.pyplot as plt
class Rocket(): def __init__(self, x=0, y=0): #each rocket has (x,y) position; user or calling function has choice #of passing in x and y values, or by default they are set at 0 self.x = x self.y = y def move_up(self): self.y += 1 def move_down(self): self.y -= 1 def move_right(self): self.x += 1 def move_left(self): self.x -= 1
#Make a series of rockets - x,y positions, I am calling it rocketrockets=[]rockets.append(Rocket())rockets.append(Rocket(0,2))rockets.append(Rocket(1,4))rockets.append(Rocket(2,6))rockets.append(Rocket(3,7))rockets.append(Rocket(5,9))rockets.append(Rocket(8, 15)) #Show on a graph where each rocket is
for index, rocket in enumerate(rockets): #original position of rockets print("Rocket %d is at (%d, %d)." % (index, rocket.x, rocket.y)) plt.plot(rocket.x, rocket.y, 'ro', linewidth=2, linestyle="dashed", markersize=12) #move the 'rocket' one up rocket.move_up() print("New Rocket position %d is at (%d, %d)." % (index, rocket.x, rocket.y)) #plot the new position plt.plot(rocket.x, rocket.y, 'bo', linewidth=2, linestyle="dashed", markersize=12) #move the rocket left, then plot the new position rocket.move_left() plt.plot(rocket.x, rocket.y, 'yo', linewidth=2, linestyle="dashed", markersize=12)
#show graph legend to match colors with positionplt.gca().legend(('original position','^ - Moved up', '< - Moved left'))plt.show()#plt.legend(loc='upper left')

Ahora vamos a crear un módulo y mover parte del código anterior al módulo. Siempre que necesitemos crear este conjunto simple de coordenadas x, y en cualquier programa, podemos usar el módulo para hacerlo.

¿Qué es un módulo y por qué lo necesitamos?

Un módulo es un archivo que contiene definiciones y declaraciones de Python. El módulo es un código Python que se puede llamar desde otros programas para tareas de uso común, sin tener que escribirlo en todos y cada uno de los programas que los usan.

Por ejemplo, cuando llama a "matplotlib.plot", está llamando a un módulo de paquete. Si no tuviera este módulo, tendría que definir la funcionalidad de trazado en cada programa que utiliza un gráfico de trazado.

De la documentación de Python:

Si sale del intérprete de Python y lo vuelve a ingresar, las definiciones que ha realizado (funciones y variables) se perderán. Por lo tanto, si desea escribir un programa algo más largo, es mejor usar un editor de texto para preparar la entrada para el intérprete y ejecutarlo con ese archivo como entrada en su lugar. Esto se conoce como crear un script. A medida que su programa se alarga, es posible que desee dividirlo en varios archivos para facilitar el mantenimiento. Es posible que también desee utilizar una función útil que haya escrito en varios programas sin copiar su definición en cada programa. Para respaldar esto, Python tiene una forma de poner definiciones en un archivo y usarlas en un script o en una instancia interactiva del intérprete. Dicho archivo se denomina módulo;las definiciones de un módulo se pueden importar a otros módulos o al módulo principal (la colección de variables a las que tiene acceso en un script ejecutado en el nivel superior y en modo calculadora).

Aquí está nuestro módulo simple. Se necesita la creación de la clase y las funciones para mover una instancia de esa clase desde el programa anterior a su propia clase. Luego usaremos esto en un nuevo programa simplemente llamando y haciendo referencia a este módulo:

Note lo que hicimos arriba:

  • creado e inicializado la clase
  • creó una función para mover una instancia de la clase en las cuatro direcciones principales (arriba, abajo, derecha, izquierda) y los incrementos, como parámetros o argumentos a la función
  • creó otra función para calcular la distancia entre dos instancias de la clase, usando la fórmula de la distancia del gráfico

Así es como usaremos el nuevo módulo para reescribir el mismo programa de la primera parte. Observe que en la sección de importación al principio, ahora importamos el simple_module1módulo que acabamos de crear:

Here’s the output from the code using our module. Note that they are the same, except for the chart title and the shape of the position markers, which I changed for comparative purposes.

That’s great, you may say — what are some other uses for this? One classic example is a bank account. A customer class might contain the name and contact details and — more importantly — the account class would have deposit and withdrawal elements.

This is grossly oversimplified but, for illustrative purposes, it is useful. That’s it — create a template, then define instances of that template with details (properties), and add value by adding, subtracting, modifying, moving, and using these instances for your program objectives.

Still wondering about classes? Ok, let’s get “classy” — here’s another simple illustration. We will call this class “Person”. It has only two properties — name and age. We will then add an instance of this with a person’s name and age, and print it. Depending on what your objective is, you can imagine all the other details you might add — for example, marital status and location preferences for a social networking app, job experience in years and industry specialization for a career related app. Press the little triangle below to see it work.

So there you have it. You can create many different classes, with parent classes, sub-classes and so on. Thanks for reading — please clap if you liked it. Here are some other references if you would like to learn more:

  • Python documentation — Classes
  • Python Object Oriented — Tutorials Point
  • Classes and Objects — learnpython.org