2012-01-06 1 views
-1

je l'exemple suivantclasse d'accès loopingcall torsadée vars

class Intake: 
    def __init__(self): 

     # 
     # aggregate dict to store all the counters 
     # 
     self.counters = {} 

     # 
     # start a looping call to run reach minute 
     # 
     self.lc = task.LoopingCall(self.aggregate, self.counters) 
     self.lc.start(60) 


    def aggregate(self, counters): 
     print counters 

Alors que fonctionne très bien .. mais dans ma fonction d'agrégation que je dois effacer le dict self.counters. Je rencontre des problèmes faisant cela ..

Je veux faire quelque chose comme

def aggregate(self, counters): 
     print counters 

     self.counters = {} 

Si je fais référence self.counters dans cette fonction que je reçois

exceptions.AttributeError: Intake instance has no attribute 'counters' 
+0

... alors quelle est la question? Est-ce que ça ne marche pas? – kindall

+0

J'ai modifié la question pour ajouter l'erreur en bas – Mike

Répondre

3

Il est une bonne idée d'inclure un exemple exécutable de votre problème, si j'essaye ce que vous décrivez cela fonctionne bien.

from twisted.internet import task 

class Intake: 
    def __init__(self): 

     # 
     # aggregate dict to store all the counters 
     # 
     self.counters = {} 
     self.count = 0 
     # 
     # start a looping call to run reach minute 
     # 
     self.lc = task.LoopingCall(self.aggregate, self.counters) 
     self.lc.start(1) 


    def aggregate(self, counters): 
     print '%d, %r, %r' % (self.count, counters, self.counters) 
     self.count += 1 
     self.counters = {} 

if __name__ == "__main__": 
    from twisted.internet import reactor 
    r = Intake() 
    reactor.run()