【发布时间】:2017-04-04 15:13:23
【问题描述】:
在实验过程中,我遇到了一个非常奇怪的问题,让我很困惑。通过遍历一个范围创建多个类对象后,我从另一个类中调用了一个函数,该函数会将 1 个字符串附加到主类对象。在查看了所有对象的列表后,我发现它们都是一样的,尽管它们应该不同,而且每个类不只有一个字符串,但字符串的数量与类对象本身。
class Stack():
cards = []
setUp = False
def set_up(self):
cardTypes = ["A", "B", "C", "D"]
for cardType in cardTypes:
for x in range(3):
self.cards.append(cardType)
self.setUp = True
def deal(self, player, amount):
if self.setUp:
for x in range(amount):
card = self.cards[0]
self.cards.remove(card)
player.cards.append(card)
else:
self.set_up()
self.deal(player, amount)
class Player():
cards = []
class Game():
def start(self):
stack = Stack()
players = [Player() for player in range(int(input("How many players?")))]
for player in players:
stack.deal(player, 1)
for player in players:
print(player.cards)
#all players have the same numbers of cards (the amount of players = number of cards)
#when all players should only have 1 card each since I put 1 in stack.deal
#it's also as if all players become one when I call that function.
我使用Game().start() 运行代码。
【问题讨论】:
-
不告诉我们你的缩进,你能解决它吗?我会自己做,但我不确定课程本身。它们是在父类中,还是分开的?
-
你的缩进还在拧。我猜“它们都一样”是指“它们都具有相同的
cards属性”。这是可以预料的,因为cards是一个类属性。也许你希望它是一个实例属性。 -
@Goyo 是的,它们都应该具有相同的类属性“cards”,尽管属性“cards”中应该只有一个元素 - “A”。
-
没有。你有 n 个玩家,你加了 n 张牌。
-
@ChrisCroissant 该函数不保留任何内容,并且一次只处理一个对象。但
cards属性始终相同。你知道“类属性”是什么意思吗?你似乎有点混淆类和实例。
标签: python python-3.x function class