Je débute en Python et pour bien comprendre le fonctionnement de celui-ci j'en suis venu à me renseigner sur les Méta-classes. De ce que j'ai compris (corrigez-moi si je me trompe svp) :
Une méta-classe est un objet (comme toute chose en Python) qui instancie toutes les classes. Il s'agit de l'objet 'type' pour la bibliothèque standard.
Cet objet type est le premier objet créé et c'est lui qui va instancier les suivants (les classes tout du moins, et celles-ci instancieront... les instances !).
Pour cela, une méta-classe appelle la fonction type(name, bases, classdict) qui va elle-même appeler la fonction __call__ sur l'objet type, qui va enfin elle-même appeler __new__ (qui retourne la nouvelle classe) et __init__ (qui initialise cette nouvelle classe).
On sait aussi que la classe 'object' est la super-classe de toutes les classes : tandis que 'type' sert à instancier les classes, 'object' définit leurs caractéristiques communes.
Voilà enfin ma question : Comment 'object' peut-il être la super-classe de 'type' (et donc définir ses caractéristiques) si il est lui-même créé par 'type' ?
Tu as en effet plutôt bien compris ces concepts avancés, c'est pas mal pour un débutant !
Pour la relation entre type et object, ça vient de la tambouille interne de l'interpréteur. Avec CPython par exemple c'est assez facile, si mes souvenirs sont bons les relations « type » et « classe mère » sont représentées par des pointeurs C, et donc il suffit des les initialiser à leur bonne valeur une fois que les deux objets type et object existent, pour mettre en place la double référence.
Je ne lis ta réponse que maintenant, j'ai été vraiment pas mal occupé ces derniers temps haha...
Merci d'avoir pris la peine de me répondre, ça m'aide !
Méta-classe 'type' et super-classe 'object'
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
entwanne — @entwanne — Un zeste de Python — La POO en Python — Notions de Python avancées — Les secrets d'un code pythonique