【发布时间】:2015-11-14 15:32:58
【问题描述】:
在实例化一副牌 (deck = Deck()) 后,调用 deck.show_deck() 只会打印出“两个菱形”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
【问题讨论】:
-
我会先创建一个包含所有卡片的临时列表,然后将临时列表深度复制到
deck -
这个临时列表会进入 init 吗?
-
您没有在此处显示您的
Card代码,但为什么需要deepcopy,尤其是在您第一次实例化它的情况下?这里有点不对劲。 -
卡片比较琐碎,我这里补充一下
-
@user2372996 是的,临时列表将进入
__init__,但我不禁认为这里存在设计问题,因为你真的不应该在这里需要深拷贝。至于为什么您问题中的代码不起作用的原因,我现在只是想弄清楚。
标签: python list class object append