2016-11-22 20 views
-3

クライアントの詳細を関数で更新しようとしています。しかし、それは動作しません。私はプログラムをデバッグし、ifには絶対に入っていないことに気付きました。どうしてか分かりません?forループで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) 

、私はidnamecnp、およびadressを与えるが、私は何も変更されていないリストを印刷するとき。デバッガでifに入ることはできません。なぜなら、それらは決して等しくないからです。どうして?

+2

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

+0

どうすれば変更できますか? – Mary

+1

'get_id'は関数のように聞こえます。おそらくそれは '.get_id()== id'であるべきですか? –

答えて

3

checkget_id == idとしていますが、それは機能です。また、

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

これを行うには良い方法は、別の変数にself.clients.get_all()を格納することである:あなたのifは次のようにする必要があります。 get_idget_id()と同じではないことを

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

でした。これは全く問題を解決しません...真実があるかもしれませんが、なぜこれが正しい解決法だと思うか説明する必要があります。 –

+0

ランダムにAPIを推測する場合は、おそらく答えではなくコメントにする必要があります。 –

5

注:したがって、あなたのコードは次のようになります。前者はメソッドを参照し、後者は実際にメソッドを呼び出します。

さらに、慣用的なPythonを書くことでコードを単純化することを検討してください。例:

for client in self.clients.get_all(): 
     if client.get_id() == id: 
      client.set_name(name) 
... 
関連する問題