Copy of https://perso.isima.fr/loic/python/exo_forme.php
tete du loic

 Loïc YON [KIUX]

  • Enseignant-chercheur
  • Référent Formation Continue
  • Responsable des contrats pros ingénieur
  • Référent entrepreneuriat
  • Responsable de la filière F2 ingénieur
  • Secouriste Sauveteur du Travail
mail
loic.yon@isima.fr
phone
(+33 / 0) 4 73 40 50 42
location_on
Institut d'informatique ISIMA
  • twitter
  • linkedin
  • viadeo

La fin...

 Cette page commence à dater. Son contenu n'est peut-être plus à jour. Contactez-moi si c'est le cas!

Date de première publication : 2022/10/13

L'objectif de ce petit TP à tiroir est de vous faire coder une hiérarchie de classes en interaction

Un conteneur simple (une "liste")

Vous devez créer une classe Groupe qui stocke des objets de classe A dans une liste par exemple :


group = Group()

group.append(A())
group.append(A())

print(group) # ou group.print()

Pour afficher le contenu du groupe, vous pouvez surcharger l'opérateur __str__

Vérification de l'insertion

Il faut vérifier que les objets ajoutés au groupe sont de la bonne classe, par exemple :


group.append(A()) # OK
group.append(B()) # OK si B est une classe fille de A
group.append(C()) # NON
group.append(3)   # 3

Pour ce faire, on peut utiliser ce genre de test :


if (isinstance(objet, Classe)):

Si le type n'est pas correct, on propose de lever l'exception TypeError

Copie de surface ou en profondeur ?

Que fait l'instruction suivante ?


g1 = group

g1 est un alias de group

Si vous utilisez le module copy, que fait l'instruction suivante :


g2 = copy.copy(group)

g2 est un nouvel objet mais g2 et group partagent la même liste ...

Et celle-ci ?


g3 = copy.deepcopy(group)

g3 est un nouvel objet et contient une liste d'objets copiés de group

Serialisation

Avec le module pickle, il est possible de sérialiser un objet complexe :


with open('data.pickle', 'wb') as f:
    pickle.dump(group, f, pickle.HIGHEST_PROTOCOL)

ou bien de le désérialiser :


with open('data.pickle', 'rb') as f:
    group = pickle.load(f)

Si vous voulez un format de fichier compréhensible, vous pouvez changer le niveau de protocole ou bien installer une bibliothèque non standard comme jsons.

Et le tiroir alors ?

Bah, le voilà :

La classe Forme peut même être rendue abstraite.

On peut également utiliser le module tkinter pour faire un affichage graphique...