我在将元素追加到列表时遇到麻烦,列表是我创建的自定义类的属性。包含列表的对象应该可以通过字典访问。
就上下文而言,我正在创建一个可以有多个玩家的游戏,每个玩家都有一个与他们相关联的“玩家”对象,该对象可以跟踪他们的状态,名字,角色的先前动作列表以及击杀状态:
function updateDropdown() {
var ddl = $("#dropdown").data("kendoDropDownList");
updateDataSourceForDropdown(ddl);
bnfDropDownList.dataSource.read();
}
function updateDataSourceForDropdown(kendoDropDownList) {
var dataRequestReadProperty = kendoDropDownList.dataSource.transport.read;
var requestPayload = getPayload();
dataRequestReadProperty.data = requestPayload;
}
function getPayload() {
return {
key: "value"
}
}
这些Player对象存储在PLAYER dict中,类似于以下内容:
class Player():
def __init__(self, sock, name, char, moves, kill_status):
self.sock = sock
self.name = name
self.char = char
self.moves = moves
self.kill_status = kill_status
例如,如果要访问player1的名称,则只需使用:
PLAYER = {
1: Player(sock, name, char, moves, kill_status)
2: Player(sock, name, char, moves, kill_status)
}
moves属性最初是作为一个空列表传递的,因此我可以在单个运动员的移动过程中附加它们。
问题是我使用时
player1_name = PLAYER[1].name
此举已添加到该词典中每个玩家的列表中,因此即使
PLAYER[1].moves.append(move)
将返回一个列表,其中包括我试图添加到玩家1的举动
如何将移动专门添加到进行此操作的播放器列表中?
编辑:
这是最初创建字典的方式:
PLAYER[2].moves
答案 0 :(得分:1)
问题是这样的:
moves = []
for i in range(1, LOBBY_SIZE + 1):
PLAYER[i] = pi.Player(None, name, None, moves, kill_status)
发生的事情是,您将list
所指的相同 moves
分配给每个Player
对象。
您应该这样做:
for i in range(1, LOBBY_SIZE + 1):
PLAYER[i] = pi.Player(None, name, None, [], kill_status)