[英]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.