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 :

Appel d'une callback depuis un autre module


Sujet :

Python

  1. #1
    Membre éclairé Avatar de Bayard
    Inscrit en
    Juin 2002
    Messages
    863
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 863
    Par défaut Appel d'une callback depuis un autre module
    Bonjour,

    J'ai une callback, c'est à dire une fonction passée en paramètre d'une méthode, dans le module toto.py.
    Lorsque je déclare la call back task dans le module toto.py, je peux appeler la méthode avec task en paramètre.

    Lorsque je déclare la callback dans un autre module, lors de l'appel de la méthode appelante, j'ai:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        self._action()
    TypeError: 'NoneType' object is not callable
    Pourquoi ?

    Merci

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Août 2004
    Messages
    723
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 723
    Par défaut
    Vu comme tu le présentes, as-tu vérifié déjà que self._action n'est pas None? (une mauvaise affectation, un échange de paramètres, ...)

  3. #3
    Membre éclairé Avatar de Bayard
    Inscrit en
    Juin 2002
    Messages
    863
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 863
    Par défaut
    Voici ma callback.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    def timestamp():
      print '%.2f' % ( time())

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Août 2004
    Messages
    723
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 723
    Par défaut
    Je pensais à ta classe, es-tu sûr d'affecter ton callback à self._action ?

  5. #5
    Membre éclairé Avatar de Bayard
    Inscrit en
    Juin 2002
    Messages
    863
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 863
    Par défaut
    Désolé pour le retard, j'étais pas mal pris...

    voici la classe (dansle fichier Scheduler.py)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    class Task( threading.Thread ):
        def __init__( self, action, loopdelay, initdelay ):
            self._action = action
            self._loopdelay = loopdelay
            self._initdelay = initdelay
            self._running = 1
            threading.Thread.__init__( self )
     
        def __repr__( self ):
            return '%s %s %s' % (
                self._action, self._loopdelay, self._initdelay )
     
        def run( self ):
            if self._initdelay:
                time.sleep( self._initdelay )
            self._runtime = time.time()
            while self._running:
                start = time.time()
                self._action()
                self._runtime += self._loopdelay
                time.sleep( self._runtime - start )
     
        def stop( self ):
            self._running = 0
    et l'appel:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            task = Scheduler.Task( timestamp(), 1.0, 0.25 )

  6. #6
    Membre émérite

    Profil pro
    Inscrit en
    Août 2004
    Messages
    723
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 723
    Par défaut
    Tu appelles ta fonction au lieu de la passer en callback
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    task = Scheduler.Task( timestamp(), 1.0, 0.25 )

  7. #7
    Membre éclairé Avatar de Bayard
    Inscrit en
    Juin 2002
    Messages
    863
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 863
    Par défaut
    Merci

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

Discussions similaires

  1. Appel d'une methode depuis d'autre class
    Par giraud vias dans le forum C#
    Réponses: 3
    Dernier message: 28/12/2017, 14h17
  2. Appel d'une classe depuis un autre répertoire
    Par monsieurab dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 18/02/2013, 10h18
  3. Appeler une fonction depuis un autre module
    Par willyol3 dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 08/06/2011, 08h51
  4. appel d'une fonction depuis un autre fichier?
    Par cortex59 dans le forum C++
    Réponses: 1
    Dernier message: 13/03/2009, 15h19
  5. appel d'une image depuis un autre serveur
    Par isa150183 dans le forum Traitement d'images
    Réponses: 3
    Dernier message: 16/12/2007, 17h08

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