2016-11-22 137 views
-3

我正试图用函数更新客户端的详细信息。但它不起作用。我调试程序,我意识到它永远不会进入if。我不知道为什么?跳过if语句循环的程序

这是函数:

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) 

当我尝试更新客户端,我给idnamecnpadress,但是当我打印的清单不会发生任何变化。我不能用调试器进入if,因为它表示它们永远不会相等。为什么?

+2

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

+0

以及我如何改变它? – Mary

+1

'get_id'听起来像一个函数。也许它应该是'.get_id()== id'? –

回答

3

这里的问题是你让你的checkget_id == id,但它是一个函数。你if应该是这样的:

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

此外,更好的方式来做到这一点是由一个独立的变量存储self.clients.get_all()。因此,你的代码应该是这样的:

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'应该是方法调用,那是个问题 –

+0

这不能解决所有问题......尽管可能有一些事实,但您需要解释为什么您认为这是正确的解决方案(作为一个旁白,我认为您的关于get_all的随机顺序的假设可能有缺陷) –

+0

如果你只是随机地去猜测API,你应该把它作为评论而不是答案。 –

5

注意get_id是不一样的get_id()。前者引用该方法,而后者实际上称之为方法。

另外,考虑通过编写更多的惯用Python来简化你的代码。例如:

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