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
    859
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 859
    Points : 714
    Points
    714
    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
    Si tu ne vis pas ce que tu penses alors tu penses ce que tu vis.

  2. #2
    Membre éprouvé

    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
    Points : 923
    Points
    923
    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
    859
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 859
    Points : 714
    Points
    714
    Par défaut
    Voici ma callback.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    def timestamp():
      print '%.2f' % ( time())
    Si tu ne vis pas ce que tu penses alors tu penses ce que tu vis.

  4. #4
    Membre éprouvé

    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
    Points : 923
    Points
    923
    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
    859
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 859
    Points : 714
    Points
    714
    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 )
    Si tu ne vis pas ce que tu penses alors tu penses ce que tu vis.

  6. #6
    Membre éprouvé

    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
    Points : 923
    Points
    923
    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
    859
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 859
    Points : 714
    Points
    714
    Par défaut
    Merci
    Si tu ne vis pas ce que tu penses alors tu penses ce que tu vis.

+ 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