2016-11-22 1 views
-3

Ich versuche, die Details eines Clients mit einer Funktion zu aktualisieren. Aber es funktioniert nicht. Ich debugge das Programm und merkte, dass es nie in die if geht. Ich weiß nicht warum?Programm überspringt, wenn Anweisung in for-Schleife

Dies ist die Funktion:

def UpdateClient(self,id,cnp,name,adress): 
    for i in range (len(self.clients.get_all())): 
     if self.clients.get_all()[i].get_id==id: 
      self.clients.get_all()[i].set_name(name) 
      self.clients.get_all()[i].set_cnp(cnp) 
      self.clients.get_all()[i].set_adress(adress) 

Wenn ich versuche, den Client zu aktualisieren, gebe ich die id, name, cnp und adress, aber wenn ich die Liste nichts geändert drucken. Ich kann nicht in die if mit dem Debugger gehen, weil es sagte, dass sie nie gleich sind. Warum?

+2

'self.clients.get_all() [i] .get_id()'? – RomanPerekhrest

+0

und wie könnte ich es ändern? – Mary

+1

'get_id' klingt wie eine Funktion. Vielleicht sollte es ".get_id() == id" sein? –

Antwort

3

Das Problem hier ist, dass Sie Ihre check als get_id == id machen, aber es ist eine Funktion. Ihre if sollte wie:

if self.clients.get_all()[i].get_id()==id: 
#         ^making it a function call 

Auch besserer Weg, dies zu tun, indem self.clients.get_all() in einer separaten Variablen gespeichert ist. Daher sollten Sie den Code wie folgt aussehen:

def UpdateClient(self,id,cnp,name,adress): 
    clients = self.clients.get_all() 
    for i in range (len(clients)): 
     if clients[i].get_id()==id: 
      clients[i].set_name(name) 
      clients[i].set_cnp(cnp) 
      clients[i].set_adress(adress) 
+0

'get_id' sollte Methodenaufruf sein, das war die Ausgabe –

+0

das geht überhaupt nicht auf die Frage ... obwohl es ein Körnchen Wahrheit geben kann, müssen Sie erklären, warum Sie denken, dass dies die richtige Lösung ist (nebenbei denke ich assumtion über zufällige Reihenfolge von get_all ist wahrscheinlich fehlerhaft) –

+0

Wenn Sie nur zufällig auf die API geraten, sollten Sie wahrscheinlich einen Kommentar statt einer Antwort machen. –

5

Beachten Sie, dass get_id nicht das gleiche wie get_id() ist. Der erste bezieht sich auf die Methode, während der zweite ihn tatsächlich aufruft.

Darüber hinaus in Betracht ziehen, Ihren Code zu vereinfachen, indem Sie idiomatisches Python schreiben. Zum Beispiel:

for client in self.clients.get_all(): 
     if client.get_id() == id: 
      client.set_name(name) 
...