El atareao atareao  

Reto Python 4. Un reto con clase.

Hasta el momento, lo que has creado en esto de los retos Python han sido básicamente funciones, pero ha llegado el momento de dar un salto de nivel y crear un reto con clase, o mejor dicho crear una clase en uno de los retos. Así, este reto es un tanto distinto, porque te voy a mostrar el resultado final, y tu tienes que implementar el contenido.

Aunque podríamos terminar todos los retos sin siquiera hacer una clase, te tengo que confesar que soy un enamorado de las clases. Me resulta mucho mas sencillo encapsularlo todo en clases para luego simplemente ir llevando las clases de un sitio a otro.

Reto Python. Un reto con clasae

Reto Python 4. Un reto con clase

La solución al reto 3.

En el repositorio de GitHub encontrarás además de la solución que te propongo, alguna que otra solución mas. Espero que siga el nivel a la altura a la que nos encontrábamos hasta el momento.

Siempre que quieras puedes hacer un pull request para participar en los retos. Si no controlas esto de los pull request, simplemente me lo comentas. En los próximos días sacaré algún vídeo adicional para mostrarte como puedes hacerlo de forma sencilla.

De cualquier forma, tal y como comento en otros retos, indicarte que una forma interesante de aprender a programar, además de programando, es leyendo el código implementado por otros. Así que te animo tanto a participar como a leer otras soluciones.

Por último, si piensas que voy demasiado rápido, que me dejo algo por comentar, o quieres que profundice en cualquier aspecto, no tienes mas que comentarlo, para que le demos un repaso a lo que consideres.

El cuarto de los retos. Un reto con clase.

El objeto de este reto, es un tanto distinto a los retos anteriores. Aquí lo que tienes que conseguir es que el archivo main.py, sea exactamente como te muestro a continuación,

from pathlib import Path
from xdg import xdg_config_home
from configurator import Configurator
from utils import list_images


def main(app, config):
    path = Path(xdg_config_home()) / app
    configurator = Configurator(path, config)
    data = configurator.read()
    list_images(Path(data['directorio']))

if __name__ == '__main__':
    APP = "diogenes"
    config = f"{APP}.conf"
    main(APP, config)

La parte importante, la parte en la que quiero que te fijes es precisamente en las dos líneas siguientes,

configurator = Configurator(path, config)
data = configurator.read()

Aquí lo que tienes que hacer es crear tu propia clase. Una clase que tiene que tener un método para inicializar la clase, y un segundo método que se encargará de leer el contenido.

Además seguramente necesites algunos métodos adicionales para guardar el contenido e incluso para comprobar que todo está como debería.

Finalmente se trata de las funciones que definiste en el reto anterior, encapsularlas dentro de una clase, para poder utilizar y reutilizar, propiedades y métodos.

Por supuesto, que el resultado tiene que ser el mismo que en el caso del reto número 3. Pero la aproximación es distinta.

Algunas pistas

Para que no pienses que te dejo solo y abandonado a tu suerte. Ni mucho menos. La estructura básica de una clase en Python sería algo como lo que te muestro a continuación,

class Configurator:
    def __init__(self):
        pass

Esto te puede servir de esqueleto para la clase que tienes que crear.

Además tienes que tener en cuenta que has de importar tu primera clase al módulo principal que estás ejecutando. Y no solo esto, también tienes que importar la función list_images del nuevo módulo que también has creado utils.

En fin… un primer momento interesante.

El vídeo

Por supuesto, y como no podía ser de otra forma, te traigo el vídeo que acompaña al reto para intentar resolver el tercero de los retos y darte las instrucciones pertinentes para el cuarto de los retos. Un reto con clase, un reto diferente.

La entrada Reto Python 4. Un reto con clase. aparece primero en Atareao.

Leave A Comment

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.