IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

import* et decoration


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Par défaut import* et decoration
    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

  2. #2
    Membre Expert
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Par défaut
    Ceci marche tout simplement...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    from Tkinter import *
    def gridder(cls): return cls # any decorator
    Entry= gridder(Entry)
    Button= gridder(Button)
    Listbox= gridder(Listbox)
    # OU
    import sys
    _module = sys.modules[__name__]
    for func in ('Entry', 'Listbox', 'Button','Message','Checkbutton'):
        setattr(_module, func, decorator(getattr(_module, func)))
    Pour faire bugger un truc aussi simple il suffit d'appeler Tkinter son nouveau module B, ce qui me donnait des imports infinis !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Important à lire par tous SVP
    Par Community Management dans le forum Langage
    Réponses: 5
    Dernier message: 15/11/2010, 22h54
  2. creer des decors a partir d'un fichier
    Par NICKO dans le forum DirectX
    Réponses: 2
    Dernier message: 21/09/2002, 09h34
  3. [DEV-C++]#import de fichier .tlb
    Par pdl dans le forum Dev-C++
    Réponses: 6
    Dernier message: 19/07/2002, 22h46
  4. Importer des objets de 3dsMax
    Par Anonymous dans le forum OpenGL
    Réponses: 3
    Dernier message: 06/05/2002, 13h53
  5. IMPORTANT! A lire avant tout chose
    Par Aurelien.Regat-Barrel dans le forum Windows
    Réponses: 0
    Dernier message: 01/05/2002, 16h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo