Python 附加到特定对象的属性,其中对象存储在dict中

Python 附加到特定对象的属性,其中对象存储在dict中,python,object,Python,Object,我在将元素附加到列表时遇到问题,列表是我创建的自定义类的属性。包含列表的对象应该可以通过dict访问 对于上下文,我正在创建一个可以有多个玩家的游戏,每个玩家都有一个与他们相关联的“玩家”对象,该对象跟踪他们的套接字、名称、角色以及他们以前的移动列表和杀戮状态: class Player(): def __init__(self, sock, name, char, moves, kill_status): self.sock = sock self.name = name

我在将元素附加到列表时遇到问题,列表是我创建的自定义类的属性。包含列表的对象应该可以通过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
这些播放器对象存储在播放器目录中,类似于以下内容:

PLAYER = {
1: Player(sock, name, char, moves, kill_status)
2: Player(sock, name, char, moves, kill_status)
}
因此,如果我想访问player1的名称,例如,我只需使用:

player1_name = PLAYER[1].name
“移动”属性最初作为空列表传递,以便我可以在单个玩家移动时附加这些移动

问题是当我使用

PLAYER[1].moves.append(move)
这一动作被添加到dict中每个玩家的列表中,因此

PLAYER[2].moves
将返回一个列表,其中包括我试图添加到玩家1的移动

我怎样才能把这个动作添加到玩家名单中呢

编辑:

以下是一个用户最初创建dict的方式:

moves = []

for i in range(1, LOBBY_SIZE + 1):
    PLAYER[i] = pi.Player(None, name, None, moves, kill_status)
问题是:

moves = []

for i in range(1, LOBBY_SIZE + 1):
    PLAYER[i] = pi.Player(None, name, None, moves, kill_status)
发生的情况是,您正在为每个
玩家
对象分配
移动所引用的相同
列表

您应该这样做:

for i in range(1, LOBBY_SIZE + 1):
    PLAYER[i] = pi.Player(None, name, None, [], kill_status)

如果你能在
Player
类中提供代码就好了;我怀疑问题就在那里。提供
Player
类。如果设计正确,这种情况是不会发生的。即使dict是在main()循环之外创建的,但列表是在main()中编辑的,这也是一个问题吗?@StephenMason为什么会这样?@StephenMason:只要在两个对象中使用相同的引用,列表级别的更改将反映在两侧。