2017-05-03 42 views
0

例如,假設我有一個列表:如何爲列表中的每個值創建類的實例?

people = ["bob", "tom", "joe"] 

我想打一個類實例爲每名。

我猜有沒有簡單的方法來動態創建變量名,就像這樣:

for num in range(0, 3): 
    person_"num" = Person(people[num]) 

如何做到這一點?

+1

的可能重複[使用一個字符串變量作爲變量名稱](http://stackoverflow.com/questions/11553721/using-a-string-variable-as-a-variable-name) – McGrady

+0

可能重複[如何創建可變數量的變量?](http://stackoverflow.com/questions/1373164/how-do-i-create-a-variable-number-of-variables) – DyZ

回答

0

爲什麼不使用Person s的列表呢?

persons = [] 
people = [ "bob", "tom", "joe" ] 
for p in people: 
    persons.append(Person(p)) 

然後,您可以按編號爲它們編制索引。

+3

更多Pythonic的方法是使用列表理解'個人= [Person(p)for p在人中]' – DyZ

+0

噢,謝謝,錯誤來自於將對象設置爲person [0]而未事先定義該變量。 – Dima

1

您可以使用exec來實現您的目標。

for num in range(0, 3): 
    exec("person_"+str(num)+" = Person(people[num])") 
+0

爲什麼選擇isn是否推薦? – Dima

+0

@Dima esp。在您接受用戶輸入的情況下,可能會發生惡意活動。 – JacobIRR

+0

這是不必要的(你可以使用索引列表而不是命名變量)和不安全(如果你對用戶輸入執行exec,你可能有潛在的安全缺陷) –

2

如使用字典的意見建議,給這個:

people = ["bob", "tom", "joe"] 
person_lookup = {} 
for p in people: 
    person_lookup[p] = Person(p) 

以上地道:

people = ["bob", "tom", "joe"] 
person_lookup = {p: Person(p) for p in people} 

然後使用類似:

person_lookup["bob"].some_method_on_person() 
相關問題