|
| 1 | +--- |
| 2 | +jupytext: |
| 3 | + text_representation: |
| 4 | + extension: .md |
| 5 | + format_name: myst |
| 6 | +kernelspec: |
| 7 | + display_name: Python 3 (ipykernel) |
| 8 | + language: python |
| 9 | + name: python3 |
| 10 | +language_info: |
| 11 | + name: python |
| 12 | + nbconvert_exporter: python |
| 13 | + pygments_lexer: ipython3 |
| 14 | +nbhosting: |
| 15 | + title: comptages de mots |
| 16 | +--- |
| 17 | + |
| 18 | +<div class="licence"> |
| 19 | +<span>Licence CC BY-NC-ND</span> |
| 20 | +<span>Thierry Parmentelat & Arnaud Legout</span> |
| 21 | +</div> |
| 22 | + |
| 23 | ++++ |
| 24 | + |
| 25 | +# une classe sortable et hashable |
| 26 | + |
| 27 | + |
| 28 | +## hashable |
| 29 | + |
| 30 | +lorsqu'on a vu les types prédéfinis, on a dit qu'on ne pouvait utiliser comme clés de dictionnaire que des éléments **non mutables** |
| 31 | + |
| 32 | +en réalité, les éléments qui peuvent servir de clé dans un dictionnaire (ou être mis dans un ensemble, c'est le même critère) sont appelés des objets ***hashables*** |
| 33 | + |
| 34 | +et, comme pour tous les autres traits du langage, on peut assez facilement rendre une classe *hashable** |
| 35 | + |
| 36 | +## sortable |
| 37 | + |
| 38 | +pour trier une liste d'objets, on peut customiser l'ordre du tri en passant une fonction |
| 39 | + |
| 40 | +`sorted(L, key=)` |
| 41 | + |
| 42 | +**mais aussi**, il y a une autre façon |
| 43 | +si on veut trier des éléments homogènes - tous de la même classe - il suffit de définir un ordre sur les éléments de la classe |
| 44 | + |
| 45 | +## notre prétexte |
| 46 | + |
| 47 | +pour s'entrainer, nous allons simplement créer une classe |
| 48 | + |
| 49 | +- qui modélise un élève avec un nom, un prénom, et pour faire simple une note |
| 50 | +- cette note peut évoluer au cours du temps (par ex. une moyenne générale qui change au cours du trimestre) |
| 51 | +- on suppose qu'il n'y a pas deux élèves avec le même nom **et** le même prénom |
| 52 | +- on veut pouvoir, pour écrire la classe `Classe`, créer un ensemble d'élèves |
| 53 | +- et trier cet ensemble d'élèves par moyenne générale |
| 54 | +- et pouvoir créer un dictionnaire qui a les élèves comme clés |
| 55 | + |
| 56 | +```{code-cell} ipython3 |
| 57 | +class Student: |
| 58 | + pass |
| 59 | +``` |
| 60 | + |
| 61 | +```{code-cell} ipython3 |
| 62 | +class Class: |
| 63 | +
|
| 64 | + def __init__(self): |
| 65 | + self._students = set() |
| 66 | + def add(self, student: Student): |
| 67 | + self._students.add(student) |
| 68 | +
|
| 69 | + def ranked(self) -> list[Student]: |
| 70 | + return sorted(self._students) |
| 71 | + # etc.. |
| 72 | +``` |
| 73 | + |
| 74 | +## Indices |
| 75 | + |
| 76 | +* voir le cours ici |
| 77 | + https://ue12-p24-python.readthedocs.io/en/p24/4-2-dunder-specials-nb.html#classe-sortable-obj-obj2 |
0 commit comments