... | ... | @@ -90,6 +90,7 @@ class UnObjetPourTester: |
|
|
|
|
|
def __enter__(self):
|
|
|
print(f'Création de {self.nom}.')
|
|
|
return self
|
|
|
|
|
|
def __exit__(self, exc_type, exc_value, tb):
|
|
|
print(f'Destruction de {self.nom} ; hop dans la poubelle {self.poubelle}.')
|
... | ... | @@ -101,14 +102,15 @@ papier_gras = UnObjetPourTester("papier gras", "grise") |
|
|
del(papier_gras)
|
|
|
# dans le cadre d'un context manager
|
|
|
with UnObjetPourTester("bouteille d'eau", "verte") as bouteille_eau:
|
|
|
del(bouteille_eau)
|
|
|
print("on jette l'objet ", bouteille_eau.nom)
|
|
|
```
|
|
|
L'exemple ci-dessus écrit dans la console:
|
|
|
> tests de la notion de context manager
|
|
|
Création de bouteille d'eau.
|
|
|
Destruction de bouteille d'eau ; hop dans la poubelle verte.
|
|
|
> Création de bouteille d'eau.
|
|
|
> on jette l'objet bouteille d'eau
|
|
|
> Destruction de bouteille d'eau ; hop dans la poubelle verte.
|
|
|
|
|
|
Les actions définies par __enter__ et __exit__ ne sont exécutées que dans le second cas.
|
|
|
Les actions définies par __enter__ et __exit__ ne sont exécutées que dans le second cas. On n'a pas besoin de préciser "del(bouteille_eau)", la destruction se fait automatiquement à la fin du bloc introduit par with.
|
|
|
En s'appuyant sur cette notion, on a proposé deux scripts pour gérer la création et la destruction de la fenêtre encadrant l'appel à une méthode de filedialog.
|
|
|
Le premier, présenté ici, fait appel à une classe "fantôme", qui ne fait pas grand chose ; le seul intérêt réside dans ses méthodes __enter__ et __exit__ qui vont respectivement créer et détruire une instance de tkinter.Tk. L'appel à tkinter.filedialog.askopenfilename ou à tout autre module de tkinter se fait dans le bloc du with.
|
|
|
Le second, plus complet, prend en argument la fonction de tkinter.filedialog et l'exécute dans sa méthode __enter__ . Les méthodes sont exécutées dans cet ordre : __init__, __enter__ puis __exit__ ; pour vous en convaincre il suffit d'ajouter des **print**.
|
... | ... | |