2013-04-10 53 views
0

我需要從一個類創建實例並將名稱存儲在列表中。如何在列表中創建和存儲類的對象

robot_list = [] 
for i in range (num_robots): 
    robot_list.append('robot%s' %i) 

這造成我想作爲一個單一的類Robot的情況下使用該名稱的列表。但它們是迄今爲止的str類型。所以我寫了這個改變自己的類型,並指定類的實例的名稱:

for i in robot_list: 
    i = Robot() 

後來,當我想用​​任何元素的程序返回的AttributeError名單說,對象仍一個字符串。

我該如何解決這個問題?

回答

6
robot_list = [Robot() for i in xrange(num_robots)] 

創建Robot類的實例num_robots並將它們存儲到robot_list

如果你想「名」起來,即構造函數得到一個字符串作爲參數,使用這個:

robot_list = [Robot('robot{}'.format(i)) for i in xrange(num_robots)] 
+1

我想我會給他們一個序列號代替。所有變得有感覺並試圖接管世界的機器人都有名字......誰曾聽說過機器人05XJ3DSA5試圖接管世界? – mgilson 2013-04-10 12:28:27

0

你會需要你的機器人類採取initiallization一個字符串(如它的名字)。請注意,使用機器人列表時,您將對機器人對象起作用,而不是其名稱。然而,機器人現在將其名稱存儲在對象中。

class Robot(): 
    def __init__(roboName = ''): 
     self.name = roboName 

    # all other class methods after this 

if __name__ == '__main__' 
    robot_list = [] 
    for i in xrange (num_robots): 
     robo_name = 'robot%s' % i 
     robot_list.append(Robot(robo_name)) 
1

要添加到其他答案:您的任務不按照您期望的方式工作。

for i in robots_list: 
    i = Robot() 

不會將機器人對象保存到列表中的每個索引。它將創建該對象,但不會將其保存到您希望的索引,而會覆蓋臨時變量i。因此列表中的所有項目保持不變。

+0

謝謝,現在我看到它出錯了。 – Omid 2013-04-10 12:35:37

相關問題