Introducción
En este laboratorio, aprenderás cómo definir una clase simple de Python para representar información de acciones (stocks). Las clases son un concepto clave en la programación orientada a objetos, lo que te permite modelar entidades del mundo real y estructurar tu código de manera más eficiente.
Los objetivos de este laboratorio incluyen aprender a definir una clase simple de Python, entender los atributos y métodos de clase, crear e interactuar con instancias de clase y aplicar formato para mostrar información de objetos. El archivo stock.py se creará durante este laboratorio.
Comprendiendo las clases de Python
En Python, una clase actúa como un modelo (blueprint) para crear objetos. La programación orientada a objetos es un enfoque poderoso que nos permite organizar nuestro código de manera efectiva. Lo hace agrupando datos y funciones relacionados. De esta manera, podemos manejar programas complejos con mayor facilidad y hacer que nuestro código sea más modular y mantenible.
Una clase de Python se compone de dos componentes principales:
- Atributos: Son variables que almacenan datos dentro de una clase. Puedes pensar en los atributos como las características o propiedades de un objeto. Por ejemplo, si estamos creando una clase para representar a una persona, los atributos podrían ser el nombre, la edad y la altura de la persona.
- Métodos: Son funciones que pertenecen a una clase y pueden acceder o modificar sus atributos. Los métodos definen las acciones que un objeto puede realizar. Usando el ejemplo de la clase persona, un método podría ser una función que calcula la edad de la persona en meses.
Las clases son extremadamente útiles ya que proporcionan una forma de crear código reutilizable y modelar conceptos del mundo real. En este laboratorio, crearemos una clase Stock. Esta clase se utilizará para representar información de acciones (stocks), como el nombre de la acción, el número de acciones y el precio por acción.
A continuación, se muestra la estructura básica de una clase de Python:
class ClassName:
def __init__(self, parameter1, parameter2):
self.attribute1 = parameter1
self.attribute2 = parameter2
def method_name(self):
## Code that uses the attributes
return result
El método __init__ es un método especial en las clases de Python. Se llama automáticamente cuando creamos un nuevo objeto a partir de la clase. Este método se utiliza para inicializar los atributos del objeto. El parámetro self es una referencia a la instancia de la clase. Se utiliza para acceder a los atributos y métodos desde dentro de la clase. Cuando llamamos a un método en un objeto, Python pasa automáticamente el propio objeto como el primer argumento, por lo que usamos self en las definiciones de los métodos. Esto nos permite trabajar con los atributos de la instancia específica y realizar operaciones en ellos.
Creando la clase Stock
En Python, una clase es un modelo (blueprint) para crear objetos. Te permite agrupar datos y funcionalidades juntos. Ahora, creemos nuestra clase Stock para representar información de acciones (stocks). Una acción tiene ciertas características, como su nombre, el número de acciones y el precio por acción. Definiremos atributos para estos aspectos dentro de nuestra clase.
Primero, debes estar en el directorio correcto en el WebIDE. Si no estás ya en el directorio
/home/labex/project, navega hasta él. Aquí es donde trabajaremos en el código de nuestra claseStock.Una vez que estés en el directorio correcto, crea un nuevo archivo en el editor. Llama a este archivo
stock.py. Este archivo contendrá el código de nuestra claseStock.Ahora, agreguemos el código para definir la clase
Stock. Copia y pega el siguiente código en el archivostock.py:
class Stock:
def __init__(self, name, shares, price):
self.name = name
self.shares = shares
self.price = price
def cost(self):
return self.shares * self.price
En este código:
- La declaración
class Stock:crea una nueva clase llamadaStock. Esto es como una plantilla para crear objetos de acciones. - El método
__init__es un método especial en las clases de Python. Se llama constructor. Cuando creas un nuevo objeto de la claseStock, el método__init__se ejecutará automáticamente. Toma tres parámetros:name,sharesyprice. Estos parámetros representan la información sobre la acción. - Dentro del método
__init__, usamosselfpara referirnos a la instancia de la clase. Almacenamos los valores de los parámetros como atributos de instancia. Por ejemplo,self.name = namealmacena el parámetronamecomo un atributo del objeto. - El método
cost()es un método personalizado que definimos. Calcula el costo total de la acción multiplicando el número de acciones (self.shares) por el precio por acción (self.price).
- Después de agregar el código, guarda el archivo. Puedes hacerlo presionando
Ctrl+So haciendo clic en el icono de Guardar. Guardar el archivo asegura que tus cambios se conserven.
Examinemos el código nuevamente para asegurarnos de entenderlo:
- Definimos una clase llamada
Stock. Esta clase se utilizará para crear objetos de acciones. - El método
__init__toma tres parámetros:name,sharesyprice. Inicializa los atributos del objeto con estos valores. - Dentro de
__init__, almacenamos estos parámetros como atributos de instancia usandoself. Esto permite que cada objeto tenga su propio conjunto de valores para estos atributos. - Agregamos un método
cost()que calcula el costo total multiplicando el número de acciones por el precio. Esta es una funcionalidad útil para nuestros objetos de acciones.
Cuando creamos un objeto Stock, el método __init__ se ejecutará automáticamente, configurando el estado inicial de nuestro objeto con los valores que proporcionamos. De esta manera, podemos crear fácilmente múltiples objetos de acciones con diferentes nombres, números de acciones y precios.
Creando objetos Stock
Ahora que hemos definido nuestra clase Stock, es hora de ponerla en acción. Crear instancias de una clase es como hacer ejemplos específicos basados en un modelo general. En este caso, la clase Stock es nuestro modelo, y crearemos algunos objetos de acciones. Después de crear estos objetos, aprenderemos cómo acceder a sus atributos (características) y métodos (acciones que pueden realizar).
Primero, necesitamos abrir una terminal en el WebIDE. La terminal es como un centro de comandos donde podemos dar instrucciones a nuestra computadora. Para abrirla, haz clic en "Terminal" en el menú.
Una vez que la terminal esté abierta, debemos asegurarnos de estar en el directorio correcto del proyecto. El directorio del proyecto es donde se almacenan todos los archivos relevantes para nuestro proyecto. Si no estás ya en el directorio del proyecto, utiliza el siguiente comando para navegar hasta allí:
cd /home/labex/project
- Ahora, queremos iniciar Python en modo interactivo con nuestro archivo
stock.py. El modo interactivo nos permite probar nuestro código paso a paso y ver los resultados inmediatamente. El archivostock.pycontiene la definición de nuestra claseStock. Utiliza el siguiente comando:
python3 -i stock.py
La bandera -i es importante aquí. Le dice a Python que ejecute primero el script stock.py. Después de ejecutar el script, inicia una sesión interactiva. En esta sesión, podemos acceder a cualquier clase y variable que se hayan definido en el script stock.py.
- Creemos un nuevo objeto
Stockpara las acciones de Google. Crear un objeto es como hacer una instancia específica de la claseStockcon valores particulares. Utiliza el siguiente código:
s = Stock('GOOG', 100, 490.10)
Esta línea de código crea una nueva instancia de la clase Stock. Aquí está lo que significa cada valor:
- Nombre: 'GOOG' - Este es el símbolo de las acciones de Google.
- Acciones: 100 - Representa el número de acciones de Google que tenemos.
- Precio: 490.10 - Este es el precio por acción de las acciones de Google.
- Ahora que tenemos nuestro objeto
Stock, podemos acceder a sus atributos. Los atributos son como las propiedades de un objeto. Para acceder a un atributo, usamos el nombre del objeto seguido de un punto y el nombre del atributo.
s.name
Cuando ejecutes este código, mostrará el nombre de la acción:
'GOOG'
Accedamos al número de acciones:
s.shares
La salida será el número de acciones que definimos:
100
Finalmente, accedamos al precio por acción:
s.price
La salida será el precio por acción:
490.1
- Nuestra clase
Stocktiene un método llamadocost(). Un método es como una acción que un objeto puede realizar. En este caso, el métodocost()calcula el costo total de nuestras acciones. Para llamar a este método, utiliza el siguiente código:
s.cost()
La salida será el costo total:
49010.0
El método cost() funciona multiplicando el número de acciones (100) por el precio por acción (490.10), lo que nos da 49010.0.
Trabajando con múltiples objetos Stock
En la programación orientada a objetos, una clase es como un modelo (blueprint), y las instancias de esa clase son los objetos reales creados a partir de ese modelo. Nuestra clase Stock es un modelo para representar acciones (stocks). Podemos crear múltiples instancias de esta clase Stock para representar diferentes acciones. Cada instancia tendrá su propio conjunto de atributos, como el nombre de la acción, el número de acciones y el precio por acción.
- Con la sesión interactiva de Python todavía en ejecución, vamos a crear otro objeto
Stock. Esta vez, representará a IBM. Para crear una instancia de la claseStock, llamamos al nombre de la clase como si fuera una función y pasamos los argumentos necesarios. Los argumentos aquí son el nombre de la acción, el número de acciones y el precio por acción.
t = Stock('IBM', 50, 91.5)
En esta línea de código, estamos creando un nuevo objeto Stock llamado t que representa a IBM. Tiene 50 acciones, y cada acción cuesta $91.5.
- Ahora, queremos calcular el costo de esta nueva acción. La clase
Stocktiene un método llamadocost()que calcula el costo total de la acción multiplicando el número de acciones por el precio por acción.
t.cost()
Cuando ejecutes este código, Python llamará al método cost() en el objeto t y devolverá el costo total.
Salida:
4575.0
- Podemos formatear y mostrar la información de nuestras acciones de una manera agradable y organizada utilizando el formato de cadenas (string formatting) de Python. El formato de cadenas nos permite especificar cómo se deben presentar diferentes tipos de datos en una cadena.
print('%10s %10d %10.2f' % (s.name, s.shares, s.price))
En este código, estamos utilizando el formato de cadenas de estilo antiguo en Python. El operador % se utiliza para sustituir valores en una plantilla de cadena. La plantilla de cadena '%10s %10d %10.2f' define cómo se deben formatear el nombre de la acción, el número de acciones y el precio.
Salida:
GOOG 100 490.10
Esta cadena formateada funciona de la siguiente manera:
%10sformatea una cadena en un campo de 10 caracteres de ancho (alineado a la derecha). Esto significa que el nombre de la acción se colocará en un espacio de 10 caracteres de ancho y estará alineado a la derecha dentro de ese espacio.%10dformatea un entero en un campo de 10 caracteres de ancho. Entonces, el número de acciones se colocará en un espacio de 10 caracteres de ancho.%10.2fformatea un número de punto flotante con 2 decimales en un campo de 10 caracteres de ancho. El precio se mostrará con dos decimales y se colocará en un espacio de 10 caracteres de ancho.
- Ahora, formateemos la información de las acciones de IBM de la misma manera. Solo necesitamos reemplazar el nombre del objeto de
saten el código de formato de cadenas.
print('%10s %10d %10.2f' % (t.name, t.shares, t.price))
Salida:
IBM 50 91.50
- En Python moderno, también podemos usar f - cadenas (f - strings) para el formato. Las f - cadenas son más legibles y fáciles de usar. Comparemos los costos de ambas acciones utilizando f - cadenas.
print(f"Google stock costs ${s.cost()}, IBM stock costs ${t.cost()}")
En esta f - cadena, estamos incrustando directamente expresiones dentro de llaves {}. Python evaluará estas expresiones e insertará los resultados en la cadena.
Salida:
Google stock costs $49010.0, IBM stock costs $4575.0
- Cuando hayas terminado de experimentar, es hora de salir del modo interactivo de Python. Puedes hacer esto utilizando la función
exit().
exit()
Cada objeto Stock mantiene su propio conjunto de atributos, lo que demuestra cómo funcionan las instancias de clase en la programación orientada a objetos. Esto nos permite crear múltiples objetos de acciones, cada uno con valores diferentes, mientras comparten los mismos métodos.
Mejorando la clase Stock
En Python, las clases son una forma poderosa de organizar datos y comportamiento. Nos permiten agrupar datos y funciones relacionados. En esta sección, mejoraremos nuestra clase Stock agregando un método que muestre la información de las acciones formateada. Este es un gran ejemplo de cómo podemos encapsular tanto datos como comportamiento en nuestras clases. La encapsulación significa agrupar datos con los métodos que operan sobre esos datos, lo que ayuda a mantener nuestro código organizado y más fácil de gestionar.
Primero, necesitas abrir el archivo
stock.pyen el editor del WebIDE. El archivostock.pyes donde hemos estado trabajando en nuestra claseStock. Abrirlo en el editor nos permite hacer cambios en la definición de la clase.Ahora, modificaremos la clase
Stockpara agregar un nuevo métododisplay(). Este método se encargará de imprimir la información de las acciones de manera bien formateada. Así es como puedes hacerlo:
class Stock:
def __init__(self, name, shares, price):
self.name = name
self.shares = shares
self.price = price
def cost(self):
return self.shares * self.price
def display(self):
print(f"Stock: {self.name}, Shares: {self.shares}, Price: ${self.price:.2f}, Total Cost: ${self.cost():.2f}")
En el método __init__, inicializamos el nombre de la acción, el número de acciones y el precio. El método cost calcula el costo total de la acción multiplicando el número de acciones por el precio. El nuevo método display utiliza una f - cadena para formatear e imprimir la información de la acción, incluyendo el nombre, el número de acciones, el precio y el costo total.
Después de hacer estos cambios, necesitas guardar el archivo. Puedes hacerlo presionando
Ctrl+Sen tu teclado o haciendo clic en el icono de Guardar en el editor. Guardar el archivo asegura que tus cambios se conserven y se puedan utilizar más tarde.A continuación, iniciaremos una nueva sesión interactiva de Python. Una sesión interactiva nos permite probar nuestro código inmediatamente. Para iniciar la sesión, ejecuta el siguiente comando en la terminal:
python3 -i stock.py
La opción -i le dice a Python que inicie una sesión interactiva después de ejecutar el archivo stock.py. De esta manera, podemos usar la clase Stock y sus métodos de inmediato.
- Ahora, creemos un objeto de acción y usemos el nuevo método
display(). Crearemos un objeto que represente las acciones de Apple y luego llamaremos al métododisplaypara ver la información formateada. Aquí está el código:
apple = Stock('AAPL', 200, 154.50)
apple.display()
Cuando ejecutes este código en la sesión interactiva, verás la siguiente salida:
Stock: AAPL, Shares: 200, Price: $154.50, Total Cost: $30900.00
Esta salida muestra que el método display está funcionando correctamente y está formateando la información de la acción como se esperaba.
- Finalmente, creemos una lista de acciones y mostrémoslas todas. Esto mostrará cómo podemos usar el método
displaycon múltiples objetos de acciones. Aquí está el código:
stocks = [
Stock('GOOG', 100, 490.10),
Stock('IBM', 50, 91.50),
Stock('AAPL', 200, 154.50)
]
for stock in stocks:
stock.display()
Cuando ejecutes este código, obtendrás la siguiente salida:
Stock: GOOG, Shares: 100, Price: $490.10, Total Cost: $49010.00
Stock: IBM, Shares: 50, Price: $91.50, Total Cost: $4575.00
Stock: AAPL, Shares: 200, Price: $154.50, Total Cost: $30900.00
Al agregar el método display() a nuestra clase, hemos encapsulado la lógica de formato dentro de la clase misma. Esto hace que nuestro código sea más organizado y más fácil de mantener. Si necesitamos cambiar la forma en que se muestra la información de las acciones, solo necesitamos modificar el método display en un solo lugar, en lugar de hacer cambios en todo nuestro código.
Resumen
En este laboratorio, has aprendido cómo definir una clase de Python con atributos y métodos, crear instancias de clase con valores de atributos específicos, acceder a los atributos de los objetos y llamar a los métodos de los objetos. También has aprendido a formatear y mostrar la información de los objetos de varias maneras, trabajar con múltiples objetos de la misma clase y mejorar una clase agregando nuevos métodos.
Estos conceptos de programación orientada a objetos son fundamentales en Python y sirven como base para organizar el código en aplicaciones más grandes. Las clases ayudan a agrupar datos y funcionalidades relacionados, lo que hace que tu código sea más modular y más fácil de mantener. Para mejorar aún más tus habilidades, considera agregar características a la clase Stock, como validación de datos, métodos para actualizar las acciones o el precio y un método para calcular la ganancia o pérdida.