2014-03-05 43 views
0

所以,如果你想創建一個從你的類的對象:迭代動態地從一個類創建對象

class person: 
    pass 

myObj=person() 

但是,如果你想創建對象的衆多什麼?我總是得到名稱錯誤:

In [1]: class person(object): 
    ...:  pass 
    ...: 

In [2]: for name in [khalid, majid]: 
    ...:  name=person() 
    ...:  
--------------------------------------------------------------------------- 
NameError         Traceback (most recent call last) 
<ipython-input-2-425dbd385d30> in <module>() 
----> 1 for name in khalid, majid: 
     2  name=person() 
     3 

NameError: name 'khalid' is not defined 

那麼,爲什麼這樣呢?

回答

1

當你寫這不會因爲工作:

for name in [khalid, majid]: 

的Python試圖找出它們還可以參考由列表中引用的名稱khalidmajid這樣的對象。但是這些名字還沒有被分配,因此NameError

要做到這一點,最好的方法是創建對象的字典,使用name作爲鍵:

people = {} 
for name in ["khalid", "majid"]: 
    people[name] = person() 

您也可以使name實例屬性:

class Person(object): # upper case for class names is conventional 

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

和/或將對象放在列表中:

people = [] 
for name in ["khalid", "majid"]: 
    people.append(Person(name))