2013-05-29 54 views
0

我有下面的類設置:如何使用Python中的一系列字典中的值創建類實例?

class Card(object): 
    def __init__(self, name="", attack=0, defense=0, magic=0, shield=0, description=""): 
     self.name = name 
     self.attack = int(attack) 
     self.defense = int(defense) 
     self.magic = int(magic) 
     self.shield = int(shield) 
     self.description = description 

我想提出利用csv.dictreader創建詞典列表的Card實例。

這裏是確定我cardList回報的方法:

[ 
{'Magic': '200', 'Shield': '100', 'NameOfCard': 'Knight', 'Attack': '700', 'Defense': '400', 'Description': ''}, 
{'Magic': '500', 'Shield': '500', 'NameOfCard': 'Mage', 'Attack': '0', 'Defense': '0', 'Description': ''}, 
{'Magic': '100', 'Shield': '100', 'NameOfCard': 'Peasant', 'Attack': '100', 'Defense': '100', 'Description': ''}, 
{'Magic': '0', 'Shield': '0', 'NameOfCard': 'Lancer', 'Attack': '400', 'Defense': '100', 'Description': ''}, 
{'Magic': '100', 'Shield': '200', 'NameOfCard': 'Guardian', 'Attack': '100', 'Defense': '600', 'Description': ''}, 
...] 

我希望能夠使用'NameOfCard'值命名實例,然後該值映射到由__init__採取的論點方法在Card類中。

我首先想到的是做這樣的事情:

Knight = Card(cardList[0]('NameOfCard')...) 

但調用print Knight.name回報TypeError: 'dict' object is not callable

如何使用我的dicts列表來創建Card類的實例?

回答

2

使用參數拆包:

knight = Card(**dict_of_properties) 

這將擴大dict_of_properties成命名參數:

knight = Card(name='foo', stuff='bar') 

假設dict_of_properties的樣子:

dict_of_properties = { 
    'name': 'foo', 
    'stuff': 'bar' 
} 
+0

謝謝!這工作,就像上面的答案一樣。我不知道**的能力。 – bhamhawker

2

如果參數名字是一樣的字典鍵,那麼你可以使用:

Knight = Card(**cardList[0]) 

因爲它是你需要的字典鍵首先映射到正確的參數名。

+0

我修改了CSV文件,使鍵比賽。謝謝!我不知道**的能力。 – bhamhawker

相關問題