附加到特定对象的属性,对象存储在字典中

时间:2019-02-18 13:33:26

标签: python object

我在将元素追加到列表时遇到麻烦,列表是我创建的自定义类的属性。包含列表的对象应该可以通过字典访问。

就上下文而言,我正在创建一个可以有多个玩家的游戏,每个玩家都有一个与他们相关联的“玩家”对象,该对象可以跟踪他们的状态,名字,角色的先前动作列表以及击杀状态:

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

1 个答案:

答案 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)