Exos python classes ### Exercice : Système de gestion de bibliothèque avec décorateurs personnalisés Créez un système de gestion de bibliothèque avec les classes suivantes : 1. **Item (Classe Abstraite)** : Représente un élément général de la bibliothèque. - Attributs : `title`, `author`, `publication_year` - Méthodes : `__init__`, `__str__`, `is_available` (méthode abstraite) - Utilisez un décorateur personnalisé pour mesurer le temps d'exécution de `is_available`. 2. **Book (Sous-classe de Item)** : Représente un livre. - Attributs : `title`, `author`, `publication_year`, `isbn`, `num_copies` - Méthodes : `__init__`, `__str__`, `is_available`, `borrow`, `return_book` - Utilisez un décorateur de classe personnalisé pour ajouter un compteur d'instances. 3. **Magazine (Sous-classe de Item)** : Représente un magazine. - Attributs : `title`, `author`, `publication_year`, `issue_number`, `num_copies` - Méthodes : `__init__`, `__str__`, `is_available`, `borrow`, `return_magazine` - Utilisez un décorateur de méthode personnalisé pour loguer les emprunts et retours. 4. **Library** : Gère une collection d'éléments. - Attributs : `collection` (un dictionnaire avec le titre comme clé et l'objet Item comme valeur) - Méthodes : `__init__`, `add_item`, `remove_item`, `search_item`, `borrow_item`, `return_item` ```python # Exemple d'utilisation library = Library() book = Book("Électrothérapie", "Maloine", 1969, "1234567890", 5) magazine = Magazine("Ma Campagne", "Touriste", 2023, "Mai", 10) library.add_item(book) library.add_item(magazine) print(library.search_item("1984")) print(library.search_item("Time")) library.borrow_item("1984") print(library.search_item("1984")) library.return_item("1984", "book") print(library.search_item("1984")) print(f"Total Book instances: {Book.get_instance_count()}") print(f"Total Magazine instances: {Magazine.get_instance_count()}") ```