gpt4 book ai didi

python - 如何将类对象 append 到列表

转载 作者:太空宇宙 更新时间:2023-11-04 08:05:25 26 4
gpt4 key购买 nike

在实例化一副牌后 (deck = Deck()),调用 deck.show_deck() 只会打印出“两个方 block ”52 次。 “复制”部分符合 this answer ,但似乎没有帮助。有什么建议吗?

import copy
from card import Card

class Deck:

card_ranks = ['ace','king','queen','jack','ten','nine','eight','seven','six','five','four','three','two']
card_suites = ['clubs','hearts','spades','diamonds']

deck = []

def __init__(self):
#create a deck of 52 cards

for suite in Deck.card_suites:
for rank in Deck.card_ranks:
Deck.deck.append(copy.deepcopy(Card(card_rank=rank, card_suite=suite)))



def show_deck(self):
for item in Deck.deck:
print item.get_name()

卡片:

class Card:

card_name = ''

def __init__(self, card_rank, card_suite):
self.card_rank = card_rank.lower()
self.card_suite = card_suite.lower()
Card.card_name = card_rank + " of " + card_suite

def get_name(self):
return Card.card_name

最佳答案

这里的问题是 Card 类有一个名称变量,它与 Card 类的所有实例共享。

当你有:

class Card:

card_name = ''

这意味着所有 Card 对象都将具有相同的名称 (card_name),这几乎肯定不是您想要的。

你必须让名字成为实例的一部分,而不是像这样:

class Card:
def __init__(self, card_rank, card_suite):
self.card_rank = card_rank.lower()
self.card_suite = card_suite.lower()
self.card_name = card_rank + " of " + card_suite

def get_name(self):
return self.card_name

你会发现 deepcopy 不需要,也从来不需要,但它确实告诉你 deepcopy 不允许你保持类的不同状态变量。

此外,如果您想打印出来,我建议您更改 Card 使其拥有自己的 __str__ 方法:

class Card:
def __init__(self, card_rank, card_suite):
self.card_rank = card_rank.lower()
self.card_suite = card_suite.lower()

def __str__(self):
return "{0} of {1}".format(card_rank, card_suit)

这使用 Python 语言本身来打印类,并且有一个好处,即您的类现在可以在打印语句和字符串转换中正常工作。所以不是:

print some_card.get_name()

你可以做

print some_card

关于python - 如何将类对象 append 到列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32127602/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com