Присоединение к атрибуту конкретного объекта, где объекты хранятся в диктанте - PullRequest
0 голосов
/ 18 февраля 2019

У меня проблемы с добавлением элемента в список, где список является атрибутом пользовательского класса, который я создал.Объект, содержащий список, должен быть доступен через диктовку.

Для контекста я создаю игру, в которой может быть несколько игроков, с каждым игроком связан объект 'Player', который отслеживает их сокет, имя,символизируйте список своих предыдущих ходов и статус убийства:

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)
}

Так что, если я хочунапример, для доступа к имени игрока1 я просто использую:

player1_name = PLAYER[1].name

атрибут ходов изначально передается в виде пустого списка, чтобы я мог добавлять ходы отдельных игроков по мере их создания.

Проблема в том, что когда я использую

PLAYER[1].moves.append(move)

Ход добавляется в список каждого игрока в диктанте, так что даже

PLAYER[2].moves

возвращает список, включающийход, который я пытался добавить к игроку 1

Как я могу добавить ход специально в список игроков, которым он был сделан?

РЕДАКТИРОВАТЬ:

Вот каксоздатьдиктовать изначально:

moves = []

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

1 Ответ

0 голосов
/ 18 февраля 2019

Проблема заключается в следующем:

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...