2017-05-11 2 views
1

ein Verfahren in einem Zeitplan Job nennen habe ich eine Klasse, die wie folgt aussieht:kann nicht

xyz = Account(balance=6000) 
xyz.balance 
> 6000 

Ich habe auch eine stumme Druckfunktion:

class Account(object): 
    """A simple bank account""" 

    def __init__(self, balance=0.0): 
     """ 
     Return an account object with a starting balance of *balance*. 
     """ 
     self.balance = balance 

    def withdraw(self, amount): 
     """ 
     Return the balance remaining after withdrawing *amount* dollars. 
     """ 
     self.balance -= amount 
     return self.balance 

    def deposit(self, amount): 
     """ 
     Return the amount remaining after depositing *amount* dollars. 
     """ 
     self.balance += amount 
     return self.balance 

ich es in xyz initialisieren werden :

def thing(): 
    print("I am doing a thing...") 

Wenn ich versuche, die deposit Methode in meinem schedule anrufen Flow:

import schedule 

# this works 
# schedule.every(5).seconds.do(thing) 

# this doesn't work 
schedule.every(5).seconds.do(xyz.deposit(2300)) 

while True: 
    schedule.run_pending() 

ich die folgende Fehlermeldung erhalten:

TypeError: the first argument must be callable

Irgendwelche Ideen? Ist es überhaupt möglich, Methoden innerhalb eines Ablaufplans aufzurufen?

Antwort

2

Nicht vertraut mit schedule, aber es scheint wie do()wants eine aufrufbar, d. H. Eine Methode. Sie geben ihm den Rückgabewert xyz.deposit(2300) statt der Methode xyz.deposit und das Argument 2300. Versuchen Sie dies:

schedule.every(5).seconds.do(xyz.deposit, 2300) 
+0

Ehrfürchtig. Vielen Dank! Ich bin jedoch nicht in der Lage, dies für Methoden ohne Eingabevariablen zum Laufen zu bringen ... es denkt, dass ich versuche, auf ein Attribut zuzugreifen. Gedanken? – emehex

+1

Ich habe ein minimales Beispiel versucht und es hat für mich funktioniert. Posten Sie genau, was Sie tun. – jpkotta

+0

Forgot 'self' in meiner Methode. Es funktioniert anders. Danke für die Bestätigung. – emehex