簡體   English   中英

從Python中的名稱列表創建多個類實例?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM