Aller au contenu principal
🔒 Mode aperçu. Les quinze premières leçons Foundations sont gratuites ; celle-ci est Pro. Démarrez un trial de 7 jours pour débloquer l'éditeur, les conseils AI et le reste du programme. Carte requise, annulez à tout moment dans Dashboard.Démarrer le trial de 7 jours →
← CoursSenior Deep-DivesModule 1 · Concurrence et composants internes asynchronesMétaclassespredict5 / 161
+100 XP
Tâche
📝 **Tâche :** Prédisez le résultat exact. \`Meta.__new__\` imprime \`meta_new:<name>\` au fur et à mesure que chaque classe est construite. \`Base.__init_subclass__\` imprime \`init_sub:<name>\` et s'ajoute au \`registry\`. Deux questions : (1) Est-ce que \`init_sub\` se déclenche lorsque \`Base\` lui-même est créé ? (2) À l'intérieur de \`Meta.__new__\` — est-ce que \`print\` s'exécute avant ou après que \`super().__new__\` construit la classe ? 📋 Implémentez la fonction ci-dessus. Les tests s'exécutent automatiquement. 💡 **Indice :** Relisez la théorie si vous êtes bloqué.
Prédis la sortie

Lis le code attentivement

class Meta(type):
    def __new__(mcs, name, bases, ns):
        print(f"meta_new:{name}")
        return super().__new__(mcs, name, bases, ns)


class Base(metaclass=Meta):
    registry = []
    def __init_subclass__(cls, **kwargs):
        print(f"init_sub:{cls.__name__}")
        Base.registry.append(cls.__name__)


class A(Base):
    pass


class B(Base):
    pass


print(Base.registry)

Que va afficher le programme ? Écris ici :

💬 Discussion

Soyez le premier à poser une question ou partager une astuce.
Connectez-vous pour rejoindre la discussion. La lecture est gratuite.
Chargement de la discussion…