Partage
  • Partager sur Facebook
  • Partager sur Twitter

Méthode spéciale

similaire à print

Sujet résolu
    4 décembre 2011 à 12:39:45

    Bonjour,

    Je suis en train de d'apprendre le language python grace au tutorial de Prolixe.
    Et j'ai une question purement théorique, si:

    Fonction => méthode spéciale
    -----------------------------
    len(mavariable) => mavariable.__len__()
    del(objet.attr) => objet.__delattr__(attr)

    Je me demandais :
    1. Est ce mieux d'utiliser l'un plutôt que l'autre en pratique? (fonction ou méthode spéciale).
    2. Y a t-il aussi une méthode spéciale qui est le pendant de:
    del(mavariable) => ?
    print(mavariable) => ?

    Merci beaucoup!
    • Partager sur Facebook
    • Partager sur Twitter
      4 décembre 2011 à 13:28:11

      Oui, pour print, c'est sys.stdout.write, et pour del, c'est __del__.

      Pour le cas de print, quand tu fais print(foo), concrètement ça fait sys.stdout.write(foo.__str__()).

      Le cas de __del__ est un peu spécial : c'est une fonction qui est appelée au moment où la variable est supprimée, et la variable sera toujours supprimée, même si le __del__ ne le précise pas.

      En pratique, il sera très souvent préférable et plus lisible d'appeller les fonctions telles print, del, … parce qu'appeller les méthodes est peu lisible, peu employé et rarement nécessaire, sauf dans qelques cas, comme l'héritage ou lors de la définition d'une classe.
      • Partager sur Facebook
      • Partager sur Twitter
        4 décembre 2011 à 14:04:05

        Citation : ordiclic


        En pratique, il sera très souvent préférable et plus lisible d'appeller les fonctions telles print, del,



        print n'est pas une fonction en Python 2.x, del n'est pas une fonction.


        Citation : ordiclic


        En pratique, il sera très souvent préférable et plus lisible d'appeller les fonctions telles print, del, … parce qu'appeller les méthodes est peu lisible, peu employé et rarement nécessaire, sauf dans qelques cas, comme l'héritage ou lors de la définition d'une classe.



        Surcharger __del__ est très rare (une première recherche dans un stock de fichiers Python me donne 250 fichiers sur 20000, soit un peu plus de 1%). Par contre, redéfinir __str__ est assez fréquent.
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          4 décembre 2011 à 15:47:24

          Ne confondons nous pas surcharge opérateur avec méthode, qui n'ont pas le même rôle?

          Le PO parle de méthode et non de surcharge opérateur, ce qui me paraît être un tort.

          Est-ce moi qui est tort? Ca m'intéresse, car peut-être suis passé à côté de quelquechose.

          Une surcharge opérateur pour modifier le rôle d'un opérateur, non? et une méthode?

          Citation : candide

          Surcharger __del__ est très rare (une première recherche dans un stock de fichiers Python me donne 250 fichiers sur 20000, soit un peu plus de 1%)



          D'ailleurs Tarek Ziade dit ceci:

          Citation : Tarek Ziade

          L'utilisation de __del__ est à proscrire car elle peut provoquer des erreurs au moment où le code est appelé

          Par exemple, l'ordre de destruction des objets au moment de l'arrêt d'un programme n'est pas garanti, et le destructeur peut appeler des références à des objets qui n'existent plus



          • Partager sur Facebook
          • Partager sur Twitter
            4 décembre 2011 à 15:57:55

            Un grand merci en tout cas pour votre réponse claire et rapide.

            Je replonge immédiatement vers la suite du cours.
            • Partager sur Facebook
            • Partager sur Twitter

            Méthode spéciale

            × 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