[英]Creating multiple class instances from a list of names in Python?
有人可以通过迭代一个名单列表和一个dicts列表向我解释如何返回一个新的类实例?
我知道我可以使用**
解压缩字典,我知道我可以遍历我的字典列表。
所以我试图创建一个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
新实例。 即:
[Knight, Mage, Warrior, ...]
我希望有能力接受这些并做到这一点:
Knight = Card(**cardList[0])
Mage = Card(**cardList[1])
Warrior = Card(**cardList[2]
等等等等。
那可能吗? 或者我是否需要使用列表new_cards[0].name
建议将所有类实例存储到列表中,然后必须使用new_cards[0].name
或new_cards[1].attack
来访问实例?
当你把名单传递给你时,你会退还一张卡片吗? 如果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
或者干脆
cards = {card['name']: Card(**card) for card in card_list}
如果你想将这些卡限制在namesOfCards
。 你可以
cards = {card['name']: Card(**card) for card in card_list if card['name'] in names_of_cards}
( 注意 :这都假设你没有两张同名的牌)
也可以像问题一样将这些卡放入你的本地命名空间,但我会高度反对它。 但如果你真的想......
locals().update(cards)
print Knight.name
确保您的列表包含字符串
CARDS = ['Knght', 'Mage'] #and so on
我不确定这是否是你需要的,但请看下面的代码:
CARD = ['knight','mage']
class cards:
def __init__(self, name):
self.n = name
self.attack = "attack " + self.n
print knight.attack
使用它,您可以遍历列表或字典来创建类的实例
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.