Bonjour,

Je souhaiterais modifier le comportement d'un module A en utilisant à la place un module B afin que:
- Quelques objets de A soient décorés (en l'occurence décorer quelques widgets de Tkinter). Disons que je connais une liste des noms des objets que je souhaite décorer.
- B soit par ailleurs entièrement similaire à A.
- Pouvoir faire [from B import*]. Dans ce cas, je voudrais que soient importées les objets décorés, et tous les autres objets inaltérés de A.

J'ai esayé un module B du genre (ici j'essaye juste de décorer la classe Entry)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
def gridder(cls): return cls # un decorateur   
import Tkinter
from Tkinter import *
Entry= gridder(Entry)
Mais des que je fais [from B import *], j'ai une erreur (dictionary changed size during iteration). Cette erreur est levée en laissant juste la ligne [from Tkinter import *]

- Est-il possible de import* un module contenant un import*
- Devrais-je plutot décorer le module [import A puis A= apply(A,dec)], utiliser inspect, ou quelque chose du genre
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
module = sys.modules[__name__]
for func in ('Entry', 'Listbox', 'Button'):
    setattr(_module, func, gridder(getattr(Tkinter, func)))
Merci d'avance