追加到类中的数组时,Python复制值

时间:2018-11-11 17:37:20

标签: python python-3.x

这是我的第一篇StackOverflow帖子,所以请告诉我是否做错了!

我试图用python制作纸牌游戏,并被告知使用基于类的系统将是最佳选择。

在尝试这样做时,将所有卡放入卡座时,这些类似乎会将值复制到代码的board.cards部分。

hidesOnDeactivate

程序返回以下内容:

#definitions and imports
import random

class Card:
    suit = ""
    base = ""

class Hand:
    cards = []
    poweri = 0
    powerii = 0

class Stack:
    cards = []

#instantiates classes
deck = Stack()
board = Stack()

player = Hand()
dealer = Hand()

#creates ordered empty deck
def newdeck(obj):
    for x in ["2","3","4","5","6","7","8","9","A","B","C","D","E"]:
        for y in ["C","D","H","S"]:
            card = Card()
            card.base = x
            card.suit = y
            obj.cards.append(card)


#shuffles deck
def shuffle():
    random.shuffle(deck.cards)


newdeck(deck)
#disabled to make debug easier
#shuffle()


#prints entire deck
print("\nDeck")
for i in range(len(deck.cards)):
    print(deck.cards[i].base, deck.cards[i].suit)
print(len(deck.cards))

#prints entire board
print("\nBoard")
for i in range(len(board.cards)):
    print(board.cards[i].base, board.cards[i].suit)

木板应该是空的???

关于,   亚历克斯

1 个答案:

答案 0 :(得分:1)

Stack.cards是可变的类属性。这意味着,所有类实例都将引用具有相同数据的同一对象。

您可能希望每个对象都有自己的数据。要更改它,请在cards方法中实例化__init__()

class Stack:
    def __init__(self):
        self.cards = []