从Python中的名称列表创建多个类实例?

2024-09-27 00:13:35 发布

您现在位置:Python中文网/ 问答频道 /正文

有人能给我解释一下如何通过遍历一系列名称和一系列dict来返回一个类的新实例吗?在

我知道我可以使用**打开我的字典,并且我知道我可以遍历我的字典列表。在

所以我尝试创建一个for循环函数,为cardList中的每个卡创建我的Card类的新实例。在

以下是我认为有效的代码:

def createCardInstances(x):
    for i in range(len(x)):
        namesOfCards[i] = Card(**cardList[i])
        return namesOfCards[i]

namesOfCards是一个卡片名称列表,我想将其转换为Card类的实例。cardList是表示卡片及其值的字典列表。在

例如,我可以这样做:

Knight = Card(**cardList[0])

效果很好。但是,如果我正在开发一个纸牌游戏,并且有超过100张单独的牌,我想避免每次都必须写出每一张牌的名称和复制粘贴=Card(**cardList[])代码。在

如何自动创建新实例?这可行吗?在


编辑:

我试图使用namesOfCards中的名称来生成Card的新实例。有人建议我在制作纸牌游戏的同时学习python的下一步是让它更面向对象。在

所以我现在的目标是使用保存在列表namesOfCards中的卡片的名称来生成Card的新实例。i、 电子邮箱:

[Knight, Mage, Warrior, ...]

我想有能力接受这些并做到这一点:

Knight = Card(**cardList[0])

Mage = Card(**cardList[1])

Warrior = Card(**cardList[2]

以此类推。在

有可能吗?或者我需要使用列表理解建议将所有类实例存储到一个列表中,然后必须使用new_cards[0].name或{}来访问这些实例吗?在


Tags: 实例代码名称游戏列表for字典card
2条回答

确保您的列表包含字符串

CARDS = ['Knght', 'Mage'] #and so on

我不确定这是否是您需要的,但请查看以下代码:

^{pr2}$

使用它,您可以遍历列表或字典来创建类的实例

当你把一张单张卡片递给它时,你是在退回它吗?另外,如果cardNames是一个名称列表,则不应使用Card对象覆盖它。你应该能做这样的事吗?在

new_cards = [Card(**card) for card in card_list]  # make new card objects
cards = {card.name: card for card in new_cards}  # dict to ref cards by name 
print cards['Knight'].name

或者干脆

^{pr2}$

如果您想将该卡限制为namesOfCards中的卡。你可以的

cards = {card['name']: Card(**card) for card in card_list if card['name'] in names_of_cards}

注意:这一切都假设您没有两张同名的卡)

也可以像问题所问的那样将这些卡片放入您的本地名称空间中,但我强烈反对这样做。但如果你真的想。。。在

locals().update(cards)
print Knight.name

相关问题 更多 >

    热门问题