2017-04-18 64 views
0

考虑我有一个名称列表,我想为列表中的这些单独名称创建对象。代码如下:数据被覆盖在对象上

class employee: 
    def __init__(self, name): 
     self.name = name 


def display(self): 
    print(self.name) 

names = ["john", "mike", "soniya"] 

for i in range(0, len(names)): 
    e = employee(names[i]) 

for i in range(0, len(names)): 
    e.display() 

代码执行时,它只显示最后一个对象的名称,而不是单个对象的名称。这些物体是否被覆盖?那么使用循环创建对象并存储它们各自的数据并将其重新取回的方式是什么?

+0

你丢掉第一循环的每次迭代之前的'e',然后调用通过第二循环每次都在同一对象上'display'。 – user2357112

回答

2

是的,对象正在结束书面。 e只引用循环完成后的最后一个对象。试试:

names = ["john", "mike", "soniya"] 

# Use a list comprehension to create the objects and put them in a list 
employees = [employee(name) for name in names] 

for employee in employees: 
    employee.display() 
0

尝试

class employee: 
    def __init__(self, name): 
     self.name = name 


def display(self): 
    print(self.name) 

names = ["john", "mike", "soniya"] 
emplist=[] 
for i in range(0, len(names)): 
    e = employee(names[i]) 
    emplist.append(e) 

for i in range(0, len(emplist)): 
    emplist[i].display() 
1

当然这一点,你重新分配相同的变量三次:

for i in range(0, len(names)): 
    e = employee(names[i]) 

如果你想保存了几个对象,并同时访问它们,使用的容器,一个list,例如:

e = [] 

for i in range(0, len(names)): 
    e.append(employee(names[i])) 
0

除了上面我还喜欢做以下工作;

for name in names: 
    employee_list.append(name) 

因此,没有必要通过索引访问名称。 这同样适用于印刷

for emp in employee_list: 
    emp.display()