1

我有以下课程设置:

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所采用的参数。

我的第一个想法是做这样的事情:

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

但是调用print Knight.name返回TypeError: 'dict' object is not callable

如何使用我的字典列表来创建Card类的实例?

4

2 回答 2

3

使用参数解包:

knight = Card(**dict_of_properties)

这将扩展dict_of_properties为命名参数:

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

假设dict_of_properties看起来像:

dict_of_properties = {
    'name': 'foo',
    'stuff': 'bar'
}
于 2013-05-29T16:23:55.703 回答
2

如果参数名称与 dict 键相同,则可以使用:

Knight = Card(**cardList[0])

实际上,您需要首先将 dict 键映射到正确的参数名称。

于 2013-05-29T16:23:18.720 回答