2014-02-06 69 views
9

假設你在Python中創建10類對象,並做一些與他們一樣:如何用python中的循環創建多個類對象?

obj_1 = MyClass() 
other_object.add(obj_1) 
obj_2 = MyClass() 
other_object.add(obj_2) 
. 
. 
. 
obj_10 = MyClass() 
other_object.add(obj_10) 

你會怎麼做它與一個循環,一個變量分配給每一個對象(如obj_1),所以代碼會更短?每個對象應該可以在循環外訪問

obj_1.do_sth() 
+0

強制性指針:http://nedbatchelder.com/blog/201112/keep_data_out_of_your_variable_names.html –

回答

17

每天都會在某些變化中提出這個問題。答案是:將數據保留在變量名稱之外,並且this is the obligatory blog post

在這種情況下,爲什麼不列出objs?

objs = [MyClass() for i in range(10)] 
for obj in objs: 
    other_object.add(obj) 

objs[0].do_sth() 
+0

如果我想分配一般變量名是什麼?像「obj_%s」%s – alwbtc

+0

然後使用字典而不是列表。你的數據有一些結構(例如,你有與值有關的鍵,或者只是一個值列表等),你選擇的Python數據結構應該反映這一點。 – RemcoGerlich

3

您可以使用列表來定義它。

objs = list() 
for i in range(10): 
    objs.append(MyClass()) 
1

我希望這是你在找什麼。

class Try: 
    def do_somthing(self): 
     print 'Hello' 

if __name__ == '__main__': 
    obj_list = [] 
    for obj in range(10): 
     obj = Try() 
     obj_list.append(obj) 

    obj_list[0].do_somthing() 

輸出:

Hello 
+0

感謝您編輯輸出。 @ falsetru –

+0

但我無法訪問循環以外的對象 – alwbtc

+0

是的,我明白了你的觀點。 我已更新我的示例請參閱。 在這裏,我將這些對象添加到列表中,然後您可以使用循環以外的任何對象。 對不起,但我的解決方案與其他人沒有什麼不同。 –

0

創建一個字典,因爲它已經被提及,但在這種情況下,每個按鍵都有,你要創建的對象名的名稱。然後該值設置爲你想要實例,例如參見類:

class MyClass: 
    def __init__(self, name): 
     self.name = name 
     self.checkme = 'awesome {}'.format(self.name) 
... 

instanceNames = ['red', 'green', 'blue'] 

# Here you use the dictionary 
holder = {name: MyClass(name=name) for name in instanceNames} 

然後你只需要調用持有者鍵,你將有所有爲您提供的屬性和您的類的方法。

holder['red'].checkme 

輸出:

'awesome red' 
+0

你有一個錯字:'seld.checkme ='應該是'self.checkme =' – BoKKeR

+0

謝謝!錯字現在消失了! – Jobel