diff --git a/source/dunders/index.rst b/source/dunders/index.rst index f91daa91..2a3f80e7 100644 --- a/source/dunders/index.rst +++ b/source/dunders/index.rst @@ -11,47 +11,25 @@ Introduction Le mot dunder est un raccourci de *Double UNDERscore* et représente toutes les méthodes Python qui commencent et finissent par un double underscore (par ex. ``__init__()``). -Les dunders sont des méthodes très puissantes et régulièrement utilisées en python. Ce sont des méthodes universelles que toute classe possède (un peu à l'image de la class Object dans Java). +Les dunders sont des méthodes universelles de python. Chacun des dunders est lié à une méthode qui sera implicitement appelée lorsqu'on fait appel au dunder (ce qui fait qu'elles sont également appelés méthodes magiques). De ce fait, on utilise fréquemment des dunders sans s'en rendre compte. -.. Quel lien entre Object de Java et les dunders? - -Cependant, dans python, les dunders sont rarement appelés directement. - -.. todo:: Un peu imprécis car il n'y a pas que des méthodes. ``__name__`` ou ``__file__`` - -Par exemple : +par exemple : .. code-block:: python3 - toto = new MyClass() - - -fera appel aux méthodes ``__new__()`` et ``__init__()`` même si ces méthodes n'ont pas été surchargées. - -.. c'est un peu la base de la programmation orienté objet... - -Les dunders ont des méthodes raccourci qui vont directement les appeler (autre raison pour laquelle on utilise régulièrement les dunders sans s'en rendre compte) : - -.. code-block:: pycon + x = MyClass() #fera appel au dunder __init__() de la classe MyClass + str(x) #fera appel au dunder __str__() de la classe MyClass + str(12) #fera appel au dunder __str__() de la classe Integer + add = 4 + 5 # fera appel au dunder ``__add__()`` de la classe Number - >>> 4 + 5 - 9 +Les dunders fonctionnent églaement d'autres éléments que des classes, par exemple le dunder *__name__* permet de connaitre le nom du module utilisé, pratique quand on veut exécuter certaines fonctions uniquement lors de l'exécution d'un module et pas lors de son import : -fera appel au dunder ``__add__()`` -.. de quelle classe? puisque c'est une méthode. +.. literalinclude:: name_dunder.py -Ou bien : -.. code-block:: python3 - - str("I'm a text") - - -fera appel au dunder ``__str__()`` de :py:class:`str`. - -.. obtenir la chaine de caractère d'une chaine de caractère, n'est pas le meilleur exemple. +Dans le même registre, un package nécessite d'avoir un fichier __init__.py qui s'exécute automatiquement lors de l'import dudit package. La grande puissance des dunders est leur universalité. En effet, Python a été programmé de manière à ce qu'une opération soit toujours relié au même *dunder*. @@ -66,18 +44,6 @@ Voir: `Python and the Principle of Least Astonishment