Exercices Fonctions & Modules Decorateur singleton pour une classe
🎉

Bravo!

Avancé 🧠 Fondamentaux 30 XP 0 personnes ont réussi

Decorateur singleton pour une classe

Les decorateurs ne s'appliquent pas qu'aux fonctions. Tu peux aussi decorer des classes. Un cas d'utilisation classique : le pattern Singleton.

Le Singleton garantit qu'une classe n'a qu'une seule instance. La première fois que tu créés un objet, il est construit normalement. Les fois suivantes, tu recuperes la meme instance.

Pour implémenter ca avec un decorateur, tu remplaces la classe par une fonction qui vérifie si une instance existe deja. Si oui, elle la renvoie. Sinon, elle en crée une.

Le mot-cle nonlocal permet de modifier une variable de la portee englobante depuis une fonction imbriquee.

Écris un decorateur singleton qui garantit qu'une classe decoree ne peut avoir qu'une seule instance.

Exemple :
@singleton
class Config:
def __init__(self):
self.debug = False

c1 = Config()
c2 = Config()
c1 is c2 vaut True (meme objet)

Tests (3/4)

Meme instance
@singleton
class Cfg:
    pass
c1 = Cfg()
c2 = Cfg()
assert c1 is c2
Attributs partages
@singleton
class Cfg:
    def __init__(self):
        self.val = 0
c1 = Cfg()
c1.val = 42
c2 = Cfg()
assert c2.val == 42
Classes differentes
@singleton
class A:
    pass
@singleton
class B:
    pass
assert not (A() is B())

+ 0 tests cachés

Indices (3 disponibles)

solution.py