我有以下课程设置:
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
我想使用Card
创建的词典列表来创建csv.dictreader
的实例。
以下是确定我的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
方法所采用的参数。< / p>
我的第一个想法是做这样的事情:
Knight = Card(cardList[0]('NameOfCard')...)
但是调用print Knight.name
会返回TypeError: 'dict' object is not callable
。
如何使用我的dicts列表创建Card
类的实例?
答案 0 :(得分:2)
如果参数名称与dict键相同,那么您可以使用:
Knight = Card(**cardList[0])
因为它是你需要首先将dict键映射到正确的参数名称。
答案 1 :(得分: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'
}