python-3.x - 在列表中追加时出现运行时错误
问题描述
我想制作一个游戏,其中“卡片”是游戏中各种卡片的类。“玩家”作为一个类,其中包含包含卡片对象的卡片列表。“游戏”作为一个类,其中包含包含玩家对象的玩家列表。因此,当我创建一个游戏对象时,它运行良好。当玩家对象附加到游戏对象中时,一切正常。问题-但是当卡片对象附加到玩家对象中时。所有卡对象都附加在所有玩家中
我正在使用 PyCharm 和 Python3.6.2(v3.6.2:5fd33b5)
class game:
players=[]
class player:
cards=[]
class card:
def __init__(self,number,suit,player):
self.number=number
self.suit=suit
self.player=player
if __name__ == "__main__":
g=game()
for i in range(0,4):
g.players.append(player())
for i in range(0,52):
g.players[i%4].cards.append(card(i%13,i/13,i%4))
预期 - 据我所知,每个玩家应该包含 13 张牌。
解决方案
原因是你如何定义player
类;cards
被定义为类变量,这意味着每个实例player
共享相同的cards
变量。由于每个玩家应该有不同的牌,cards
应该是一个实例变量,如下:
class player:
def __init__(self):
self.cards=[]
顺便说一句:通常最好给你的类起首字母大写名称,Game
比如Class
和Player
。
推荐阅读
- java - 为什么GET方法返回对象中的对象
- python - 如何在 kivy-python 中创建自定义小部件
- python - Python tkinter如何放大小部件
- android - Firebase 接收数据为空时应用崩溃
- swift - 无法将“UUID”类型的值转换为预期的参数类型“KeyPath”
- ' 在 SwiftUI 中
- python - 代码不适用于展平嵌套列表的所有测试用例
- python - 如何使用 Selenium 和 Python 在突出显示的脚本中单击 web 元素
- sql - HiveQL - 根据条件计算两行之间的时间差
- jenkins-groovy - 使用 jenkins 或 groovy 脚本更改文件中的文本
- android - 一个应用程序是否可以作为 Android 共享选项多次列出(YouTube 播放和队列)