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 :

Object is not callable


Sujet :

Python

  1. #1
    Membre averti
    Homme Profil pro
    Electronicien
    Inscrit en
    Août 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Electronicien
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2014
    Messages : 16
    Par défaut Object is not callable
    Bonsoir à tous,

    Je suis nouveau en Python et j'ai beau essayer de comprendre par moi même en lisant tous les tutos FR et ENG mais la je donne ma langue au chat..

    J'ai déjà effectué une recherche concernant ce problème mais aucun n'est exactement le même que le mien..

    J'essaie de faire un petit script qui effectue diverses tâches toutes les X minutes, comme un planificateur de tâche en somme.

    Je me doute que tout mon code est à améliorer mais j'aimerai juste comprendre se qu'il se passe ici comme erreur.



    Voici la partie du code qui pose problème, ici tout se déroule néanmoins bien car j'ai enlevé la partie qui pose problème:

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    import time, os, psutil, sys
    
    class Schedule:  
            
        def __init__(self, time_duree):
                
            self.time_start = time.time()
            self.time_duree = time_duree
            self.time_end = 0
            self.time_compteur = 0
    
        def start(self,):      # (Ré)initialise le "Chronomètre" en fixant la valeur du temps absolu actuel dans self.time_start.
    
            self.time_start = time.time()
            self.time_compteur = 0
            self.time_end = 0
        
        def compare(self,):      # Permet de connaître le temps écoulé depuis l'initialisation de la tâche.
        
            self.time_end = time.time()      # Fixe la valeur du temps absolu actuel dans self.time_end.
            self.time_compteur = self.time_end - self.time_start      # Fixe la valeur de la différence entre time_start et time_end.
    
    Schedule.start(Action_1)      # Initialise le début du "Chronomètre" en appelant .startde la classe Schedule.
    Schedule.start(Action_2)
    Schedule.start(Action_3)
    Schedule.start(Action_4)
    Action_1 = Schedule(1200)      # Initialise les objets de la classe Schedule.
    Action_2 = Schedule(120)
    Action_3 = Schedule(2400)
    Action_4 = Schedule(3600)
    
            
    def Action_1():          # C'est cette partie qui pose problème lorsque qu'elle est jointe à la routine qui contrôle si le processus est lancé. (voir code suivant)
            
      exists = False
      Schedule.compare(Action_1)
      if Action_1.time_compteur > Action_1.time_duree:       # Quand self.compteur est plus grand que la durée fixée au début, retourner True.
         return True
    
    >>> test()
    True

    Maintenant le code avec le message d'erreur:

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    import time, os, psutil, sys
    
    class Schedule:  
            
        def __init__(self, time_duree):
                
            self.time_start = time.time()
            self.time_duree = time_duree
            self.time_end = 0
            self.time_compteur = 0
    
        def start(self,):      # (Ré)initialise le "Chronomètre" en fixant la valeur du temps absolu actuel dans self.time_start.
    
            self.time_start = time.time()
            self.time_compteur = 0
            self.time_end = 0
        
        def compare(self,):      # Permet de connaître le temps écoulé depuis l'initialisation de la tâche.
        
            self.time_end = time.time()      # Fixe la valeur du temps absolu actuel dans self.time_end.
            self.time_compteur = self.time_end - self.time_start      # Fixe la valeur de la différence entre time_start et time_end.
    
    Schedule.start(Action_1)      # Initialise le début du "Chronomètre" en appelant .startde la classe Schedule.
    Schedule.start(Action_2)
    Schedule.start(Action_3)
    Schedule.start(Action_4)
    Action_1 = Schedule(1200)      # Initialise les objets de la classe Schedule.
    Action_2 = Schedule(120)
    Action_3 = Schedule(2400)
    Action_4 = Schedule(3600)
    
            
    def Action_1():          # C'est cette partie qui pose problème lorsque qu'elle est jointe à la routine qui contrôle si le processus est lancé.
            
      exists = False
      Schedule.compare(Action_1)
      if Action_1.time_compteur > Action_1.time_duree:
         for p in psutil.process_iter():      # C'est cette partie qui est rajoutée et qui pose problème, pourtant cette routine seule fonctionne également.
          try:
             pi = p.as_dict(attrs=['pid', 'name'])
          except:
             pass
          else:
             if pi['name'] == 'Fichier.exe':
                 exists = True
                 break
     
        if not exists:
          os.startfile("C:/Fichier.exe")
          Schedule.start(Action_1)      # Réinitialisation du Chronomètre 
          return
      else:
       return
    >>> test()
    Traceback (most recent call last):
      File "<pyshell#92>", line 1, in <module>
        Action_1()
    TypeError: 'Schedule' object is not callable

    Voilà j'espère avoir été clair, et que quelqu'un va pouvoir m'éclairer !

    Un grand merci d'avance,
    Bonne soirée à tous

    Gauthier

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 067
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 067
    Par défaut
    soit Action_1 est un objet Shedule, soit c'est une fonction, mais ça ne peut pas être les 2.

  3. #3
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 304
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 304
    Par défaut
    Salut,


    Tout d'abord le traceback parle de Start_Clash() d'où ça sort ça ?


    Ensuite ton code n'est pas très cohérent, tu crées une instance d'une classe avec le même nom qu'une fonction du même code, ici, Action_1 mais vu le code, je suppose que tu comptais faire la même chose avec les trois autres instances de Schedule. Plantage du code garantit.

    Ensuite tu n'utilises pas correctement tes classes et instances.

    c'est comme ceci qu'il faut faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    schedule = Schedule(1200)
    schedule.start()
     
    # et plus loin ...
        schedule.compare()
    Je suppose aussi que tu es sous Python 3.

  4. #4
    Membre averti
    Homme Profil pro
    Electronicien
    Inscrit en
    Août 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Electronicien
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2014
    Messages : 16
    Par défaut
    Salut VinsS et merci encore pour ton temps..

    Oui je suis sous Python 3.

    Désolé j'ai corrigé mon code, j'ai fais plusieurs test et j'ai donc copié le mauvais traceback.
    Pour l'ordre des instances j'ai bien sûr veillé à les lancer dans l'ordre.

    Tu viens de nouveau de m'éclairer !

    Effectivement le même nom pour l'instance de classe et la fonction ca va pas ^^.. (Tout est objet en python, je sais..)
    J'ai tellement cherché alors que c'était si évident..

    Je savais que j'allais bientôt te recroiser encore un tout grand merci ^^
    Merci aussi à toi josmiley, c'est chouette d'avoir des gens présent pour des débutants

    Bonne soirée à vous et à très vite

    Gauthier

Discussions similaires

  1. erreur : 'int' object is not callable
    Par aschreck dans le forum Général Python
    Réponses: 2
    Dernier message: 06/04/2012, 15h36
  2. Réponses: 2
    Dernier message: 01/04/2011, 09h20
  3. object is not callable
    Par rezguiinfo dans le forum Général Python
    Réponses: 6
    Dernier message: 30/01/2011, 13h43
  4. "'int' object is not callable"
    Par dingoth dans le forum Général Python
    Réponses: 2
    Dernier message: 22/12/2010, 17h38
  5. TypeError: 'file' object is not callable
    Par MariemEA dans le forum Général Python
    Réponses: 7
    Dernier message: 09/07/2010, 21h57

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