Exercices Architecture & Patterns __init_subclass__ : validation des sous-classes
🎉

Bravo!

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

__init_subclass__ : validation des sous-classes

__init_subclass__ est une méthode speciale appelee automatiquement quand une classe herite de ta classe. C'est un moyen leger de controler ce que les sous-classes ont le droit de faire.

C'est comme un chef d'equipe qui vérifie que chaque nouveau membre a bien son badge avec son nom. Si quelqu'un arrive sans badge, il est refuse.

Exemple :
class Base:
def __init_subclass__(cls, **kwargs):
super().__init_subclass__(**kwargs)
if not hasattr(cls, 'version'):
raise TypeError(cls.__name__ + ' doit definir version')

class Bonne(Base):
version = '1.0' # OK

class Mauvaise(Base): # TypeError !
pass

Crée une classe de base Plugin qui utilise __init_subclass__ pour obliger chaque sous-classe a definir un attribut de classe nom. Si une sous-classe n'a pas de nom, leve une TypeError avec le message 'La classe XYZ doit definir l'attribut nom' (ou XYZ est le nom de la sous-classe).

Attention : vérifie 'nom' in cls.__dict__ plutot que hasattr(cls, 'nom'), pour t'assurer que la sous-classe definit elle-meme l'attribut (et ne l'herite pas).

Tests (2/4)

Sous-classe valide
class P(Plugin):
    nom = 'test'
assert P.nom == 'test'
TypeError si pas de nom
try:
    class Invalide(Plugin):
        pass
    assert False, 'Devait lever TypeError'
except TypeError:
    pass

+ 0 tests cachés

Indices (3 disponibles)

solution.py