Skip to article frontmatterSkip to article content
Licence CC BY-NC-ND Thierry Parmentelat

EXO: classe sortable et hashable

hashable

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

cela est vrai pour les types prédéfinis du langage, mais pour nos types à nous (les classes, donc), c’est plus subtil:
de manière générale, 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
et, comme pour tous les autres traits du langage, on peut assez facilement rendre une classe hashable

sortable

dans une veine similaire:
pour trier une liste d’objets, on peut customiser l’ordre du tri en passant une fonction

sorted(L, key=)

mais aussi, il y a une autre façon
si on veut trier des éléments homogènes - tous de la même classe - on peut assez facilement définir un ordre sur les éléments de la classe

notre prétexte

pour s’entrainer, nous allons simplement créer une classe Student:

on veut pouvoir ensuite écrire une classe Classe:

quelque chose dans le genre de (à compléter évidemment):

class Student:
    pass
class Class:

    def __init__(self):
        self._students = set()
    def add(self, student: Student):
        self._students.add(student)

    def ranked(self) -> list[Student]:
        return sorted(self._students)
    # etc..

Indices