我正在用 Python 制作一个基本的纸牌游戏(二十一点),其中庄家和玩家各有一个hand
。有一个hand
类,我想实例化两次并分别命名对象dHand
和pHand
。因为这些“手”名称将在每一轮之后重复使用(或删除和重新分配),所以我在全球范围内声明它们:
dHand = Hand()
pHand = Hand()
当新一轮开始时,这些手牌中的卡片如下:
def deal():
global dHand, pHand
dHand = Hand() #assigning a new object to forget about old cards
pHand = Hand()
dHand.add_card(deck.deal_card())
dHand.add_card(deck.deal_card())
pHand.add_card(deck.deal_card())
pHand.add_card(deck.deal_card())
有两个问题:
- 双手似乎总是有相同的牌并且有4张牌(不是两张)。
pHand
由于某种原因,两者似乎dHand
都指向同一个对象。 - 如果我
deal()
再次调用,旧牌不会丢失 -add_card()
只是添加到旧对象,而不是新对象。
任何指针(请原谅双关语)将不胜感激。
编辑:手类定义如下:
class Hand:
def __init__(self, cards = []):
# create Hand object
self.cards = cards
self.value = 0
def __str__(self):
# return a string representation of a hand
s = "Hand contains: "
for card in self.cards:
s += str(card) + " "
return s
def add_card(self, card):
# add a card object to a hand
self.cards.append(card)