Как сделать общий список / словарь / тюпл на два экземпляра класса?
Подскажите, пожалуйста, как сделать так, чтобы результат(ы) метода play() добавлялись в общий список __log для разных экземпляров класса? т.е. грубо говоря есть два игрока(экземпляра класса) и необходимо чтобы каждый их ход записывался в общий лог. Просто на сколько я понимаю в таком виде как сейчас __log будет свой для каждого экземпляра класса...
Спасибо!
from random import randint
class SnakesLadders:
__log = []
snakechecks = {16: 6, 46: 25, 49: 11, 62: 19, 64: 60, 74: 53, 89: 68, 92: 88, 95: 75, 99: 80}
ladderchecks = {2: 38, 7: 14, 8: 31, 15: 26, 21: 42, 28: 84, 36: 44, 51: 67, 71: 91, 78: 98, 87: 94}
def __init__(self, coord):
self.__coord = coord
@staticmethod
def snake(coord):
snakecoords = SnakesLadders.snakechecks.get(coord)
return snakecoords
@staticmethod
def ladder(coord):
laddercoords = SnakesLadders.snakechecks.get(coord)
return laddercoords
def statistics(self):
return self.__log
def play(self):
self.__coord += randint(2, 12)
if self.__coord in SnakesLadders.snakechecks:
self.__coord = type(self).snake(self.__coord)
return self.__coord
if self.__coord in SnakesLadders.ladderchecks:
self.__coord = type(self).ladder(self.__coord)
return self.__coord
else:
return self.__coord
player1 = SnakesLadders(0)
player2 = SnakesLadders(0)
print(player1.play())
print(player2.play())
Ответы (1 шт):
Автор решения: Shamus Rezol
→ Ссылка
Переменная __log принадлежит всему классу, а не отдельному экземпляру. Для ее изменения для всех экземпляров, необходимо обращаться к ней через класс SnakesLadders.__log. Если задать ее значение через экземпляр, то __log этого экземпляра более не будет возвращать значение __log класса.
Пример
class SomeInstance:
variable = "Hello, "
some_a = SomeInstance()
some_b = SomeInstance()
'''
При изменении variable конкретного экземпляра
some_a, some_a.variable становится независимой
от SomeInstance.variable.
'''
some_a.variable = "Bye, "
# Продемонстрируем это: изменим SomeInstance.variable.
SomeInstance.variable += "Charlotte!"
print(some_a.variable)# Bye,
print(hex(id(some_a.variable)))# Запоминаем адрес переменной.
print()
'''
some_b.variable явно не изменялась,
но она зависит от SomeInstance.variable.
То есть some_b.variable ссылается на
SomeInstance.variable.
'''
print(some_b.variable)# Hello, Charlotte!
print(SomeInstance.variable)# Hello, Charlotte!
print(hex(id(some_b.variable)))
print(hex(id(SomeInstance.variable)))
'''
Адрес some_a.variable отличен
от равных some_b.variable и
SomeInstance.variable.
'''