2017-11-29 10 views
-1
ここ

は私のプログラムです:ループ内のオブジェクトが同じになるのはなぜですか?

いくつかのクラス:

私はJSONからいくつかのデータを読み取ろうたより
class Employee (object): 

    @classmethod 
    def __init__(self, id, name, password): 
     self.id = id 
     self.name = name 
     self.password = password 

    @classmethod 
    def toString(self): 
     return(self.id + ": " + self.name + " " + self.password) 

:私は何の問題もなく、時にすることなく、データを読み取ることができ

import os 
import json 

if os.name == 'nt': 
    path = r'Storage\employee.json' 
else: 
    path = r'Storage/employee.json' 

from employee import Employee 

if __name__ == '__main__': 
    with open(path, 'r') as file: 
     json_list = json.loads(file.read()) 
     list = [Employee(item['id'], item['name'], item['password']) for item in json_list] 
     for elemt in list: 
      print (elemt.toString()) 

Iそれを持つ従業員のリストを作成しようとします。リストは最後のオブジェクトの繰り返しになります。

+3

すべてのメソッドに 'classmethod'を置くのをやめてください。それはあなたが何を意味すると思うかを意味するものではありません。 – user2357112

+1

'__init__'は**ではない' @ classmethod'であり、 'toString'(これはクラスメイトではありません)ではおそらく' __str__'を意味します。 – alfasin

+0

この場合、どちらも 'toString()'ではありません。 –

答えて

1

@classmethodでメソッドに注釈を付けると、特定のインスタンスではなく、クラスに属していることを意味します。 Employeeクラスの両方のメソッドからこれらのデコレータを削除しても問題ありません。

1

classmethodこのケースではそう思わないように動作しません。むしろ、Pythonic __repr__メソッドを使用することができます。

class Employee: 
    def __init__(self, *args): 
     self.__dict__ = dict(zip(['id', 'name', 'password'], args)) 
    def __repr__(self): 
     return "{id}:{name} {password}".format(**self.__dict__) 

list = [Employee(item['id'], item['name'], item['password']) for item in json_list] 
関連する問題