2017-04-18 54 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()