Partage
  • Partager sur Facebook
  • Partager sur Twitter

Méta-classe 'type' et super-classe 'object'

    8 juin 2018 à 19:42:22

    Bonjour tout le monde ! :D

    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' ? o_O 

    Merci à ceux qui prendront la peine de me lire :)

    • Partager sur Facebook
    • Partager sur Twitter
      14 juin 2018 à 10:29:48

      Salut,

      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.

      • Partager sur Facebook
      • Partager sur Twitter
        19 octobre 2018 à 10:38:21

        Salut entwanne,

        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 :D !

        • Partager sur Facebook
        • Partager sur Twitter

        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.
        • Editeur
        • Markdown