80 lines
3.4 KiB
Markdown
80 lines
3.4 KiB
Markdown
# Atelier sur la première partie
|
||
|
||
L'atelier suivant vous fait construire une structure où vous pouvez :
|
||
|
||
- créer des bibliothèques
|
||
- créer des livres
|
||
- créer des utilisateurs
|
||
|
||
Et avec ces objets, vous pouvez :
|
||
|
||
- ajouter des livres à vos bibliothèques
|
||
- emprunter et rendre des livres
|
||
- voir les informations sur les emprunts
|
||
- voir les informations sur les livres présents dans une bibliothèque
|
||
- etc.
|
||
|
||
L'exercice, qui peut vous prendre un peu de temps, vous permet de :
|
||
|
||
- manipuler des objets, listes, dictionnaires
|
||
- utiliser des f-strings pour afficher des informations en console
|
||
- utiliser des méthodes et même découvrir la méthode `__str__` (faites une recherche Google)
|
||
- structurer un peu votre code (concept limité par la taille de l'exercice)
|
||
|
||
## Organisation
|
||
|
||
- un package `entities` contenant
|
||
- un module `library` pour y mettre la classe `Library`
|
||
- un module `book` pour y mettre la classe `Book`
|
||
- un module `user` pour y mettre la classe `User`
|
||
- un module `application` vous servant de point d'entrée
|
||
|
||
L'organisation est simple, ceci dû à la taille du projet. Des projets grandissants impliquent souvent des réorganisations.
|
||
|
||
## Des bibliothèques
|
||
|
||
1. Créez une classe `Library`
|
||
- Avec des attributs
|
||
- `name` (`None`)
|
||
- `is_open` (`True`)
|
||
- `books` (`None`)
|
||
- Avec des méthodes
|
||
- `__init__(self, name=None, is_open=True)` qui initialise les attributs du nouvel objet.
|
||
- `open(self, value=True)` pour changer l'état d'ouverture :
|
||
- Ne fait rien si `value` a déjà la même valeur que `self.is_open`
|
||
- `register_book(self, book)` qui ajoute un livre à l'attribut `.books` (le transforme d'abord en liste s'il est à `None`, puis ajoute le livre)
|
||
- `show_books()` qui affiche la liste des livres enregistrés
|
||
- `__str__(self)` qui renvoie le texte affiché si on fait `print()` sur l'objet
|
||
- `get_book_avg_prices()` qui renvoie le prix moyen des livres de la bibliothèque
|
||
|
||
## Des livres
|
||
|
||
1. Créez une classe `Book`
|
||
- Avec des attributs
|
||
- `title` (`None`)
|
||
- `author` (`None`)
|
||
- `is_borrowed` (`False`) : le livre est-il emprunté
|
||
- `borrower` (`None`) : personne qui a emprunté
|
||
- `history` (`None`) : liste des opérations d'emprunt du livre
|
||
- `price` (`0`) : prix de base
|
||
- Avec des méthodes
|
||
- `__init__(self, ...)` pour initialiser les attributs `title`, `price` et `author`
|
||
- `borrow(self, user)` qui marque le livre comme emprunté, et modifie `borrower` :
|
||
- Ne fait rien si le livre est déjà marqué emprunté, sinon :
|
||
- `is_borrowed` devient `True`
|
||
- `borrower` prend la référence de l'objet de la classe `User`
|
||
- `history` *devient* une liste à laquelle on ajoute le dictionnaire `{"user": user, "when": datetime.now()}`
|
||
- `return_borrow(self)` qui marque le livre comme rendu (non emprunté)
|
||
- Ne fait rien si le livre est déjà marqué comme non emprunté, sinon :
|
||
- `borrower` prend la valeur `None`
|
||
- `show_history(self)` qui affiche l'historique formaté des emprunts
|
||
- `show_status(self)` qui affiche le statut du livre : titre, emprunté etc.
|
||
|
||
## Des utilisateurs
|
||
|
||
1. Créez une classe `User`
|
||
- Avec des attributs
|
||
- `name` (`None`)
|
||
- Avec des méthodes
|
||
- `__init__(self, name=None)` qui initialise l'attribut de l'objet
|
||
- `__str__ (self)` qui renvoie une chaîne `f"Utilisateur : {self.name}"` |