Как я могу сделать объект класса клона себя в Python? - PullRequest
0 голосов
/ 14 октября 2018

Я создаю игру с полем битвы.Я создал для него класс:

class Battlefield:
    units = [[Warrior1, Warrior2]]

Я создаю функцию, которая будет клонировать юниты на поле битвы, поэтому новые Battlefield.units будут:

print (Battlefield.units)
[[Warrior1, Warrior2], [Warrior1, Warrior2]]

'Warrior1'это что-то вроде

Warrior1 = [1, 3, 2, 5, 6]

Что делает это трудным, так это то, что я должен иметь возможность корректировать статистику ТОЛЬКО для первого Воина1, без настройки статистики второго Воина1.Все вопросы, которые я видел по переполнению стека, касались того, как скопировать список в новый список, например:

new_list = old_list.copy()

Однако я не смогу ссылаться на этот новый список в существующих функциях, поскольку в игре я постоянно возвращаюсь к объекту Battlefield.unit.Другими словами, я должен клонировать ВНУТРИ существующего объекта, при этом все переменные в списке должны как-то отличаться друг от друга, чтобы я мог изменять одну, не изменяя другую.

Пожалуйста, сообщите.Спасибо!

1 Ответ

0 голосов
/ 14 октября 2018

Вы можете использовать copy.deepcopy :

>>> import copy
>>> a = [[1, 2], [3,4]]
>>> b = copy.deepcopy(a)
>>> b[0][0] = 4
>>> a
[[1, 2], [3, 4]]
>>> b
[[4, 2], [3, 4]]

Или для объектно-ориентированного подхода:

class Warrior():
  def __init__(self):
    pass
  def copy(self):
    return copy.deepcopy(self)
...