This repository was archived by the owner on May 7, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 33
Correctif n°1 #145
Open
MarcFriedli
wants to merge
4
commits into
HE-Arc:master
Choose a base branch
from
MarcFriedli:master
base: master
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Correctif n°1 #145
Changes from all commits
Commits
Show all changes
4 commits
Select commit
Hold shift + click to select a range
d377328
Correctif n°1 : ajout du lien vers la documentation officielle de pyt…
MarcFriedli de7556e
modification d'une partie du texte d'introduction : suppression de la…
MarcFriedli f8f79f2
Modification du texte, suppression de parties ineptes, ajout d'une pa…
MarcFriedli 199ba0f
Correctif : oubli de guillemets.
MarcFriedli File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -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 <http://lucumr.pocoo.org/2 | |
|
|
||
| Une autre grande utilisation des dunders consiste à les surcharger de manière à les personalisé. | ||
|
|
||
| De plus, par convention, on déclare une méthode privée comme étant un dunder : | ||
|
|
||
| .. code-block:: python3 | ||
|
|
||
| def __myPrivateMethod__(self, other): | ||
| return none; | ||
|
|
||
| .. todo:: Ceci est faux! On n'invente pas de *dunders* personnels, jamais. | ||
|
|
||
| :pep:`8` | ||
|
|
||
|
|
||
| Exemples | ||
| ======== | ||
|
|
||
|
|
@@ -106,12 +72,32 @@ De base, quand on chercher à afficher un objet, à moins que la méthode ``__st | |
|
|
||
| Idéalement, il faudrait toujours redéfinir la méthode ``__repr__()`` et redéfinir ``__str__()`` uniquement si on a besoin de l'ambiguïté. | ||
|
|
||
|
|
||
| Membres privées | ||
| ================ | ||
|
|
||
| Bien que n'étant pas un dunder, un membre commençant pas un double underscore sera considéré comme étant un membre privé : | ||
|
|
||
|
|
||
| .. code-block:: python3 | ||
|
|
||
| __private_attribut = 12 | ||
|
|
||
|
|
||
| Cependant, cette pratique est déconseillée en python car rien n'est vraiment privé et il sera toujours possible d'accéder à *__private_attribut*. Par convension, on utilise un seul undersecore pour signaler qu'un méthode est privée et après c'est à la responsabilité du développeur de ne pas faire n'importe quoi. "We are all adults here" | ||
|
|
||
|
|
||
| Conclusion | ||
| ========== | ||
|
|
||
| Il existe beaucoup de dunders. Il faut puiser dans la doc afin de connaitre ceux dont on a l'usage et savoir quand ils sont utilisés. | ||
| Ce sont de puissants outils de Python qui permettent de facilement spécialiser le comportement d'un objet. | ||
|
|
||
| Documentation officielle | ||
| ------------------------- | ||
|
|
||
| https://docs.python.org/3/reference/datamodel.html | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. avec intersphinx. |
||
|
|
||
| Bibliographie | ||
| ============= | ||
|
|
||
|
|
||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,14 @@ | ||
| """Module d'exemple utilisant le dunder __name__.""" | ||
|
|
||
|
|
||
| def some_function(): | ||
| """Affiche une simple phrase.""" | ||
| print("I'm a script") | ||
|
|
||
|
|
||
| if __name__ == '__main__': | ||
| """ | ||
| some_function ne s'exécute que si on lance directement le module | ||
| et pas si on l'importe. | ||
| """ | ||
| some_function() |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,4 +1,4 @@ | ||
| """Travis est très très compliqué.""" | ||
| """Exemple d'utilisation des dunders.""" | ||
|
|
||
|
|
||
| class SomeClass: | ||
|
|
||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,4 +1,4 @@ | ||
| """Travis est très compliqué.""" | ||
| """Exemple d'utilisation des dunders.""" | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 😍 |
||
|
|
||
|
|
||
| from math import hypot | ||
|
|
||
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Du coup, expliquez pour les méthodes privées. Vous n'étiez pas loin de la vérité.