Несколько экземпляров класса перезаписываются - PullRequest
1 голос
/ 08 февраля 2020
class Player:
    hand = [None]*10
    field = [None]*10
    deck = []

    def __init__(self, deck):
        self.deck = deck

    def setHand(self, hand):
        for i in range(0, len(hand)):
            self.hand[i] = hand[i]

    def setField(self, field):
        for i in range(0, len(field)):
            self.field[i] = field[i]

card1 = Card(1, 0)
card2 = Card(2, 0)
card3 = Card(3, 0)
h = [card1, card2, card3]
f = [card1, card2, card3]
f2 = [card1, card2]

cpu1 = Player(f2)
cpu1.setField(f2)
user1 = Player(h)
user1.setHand(h)
user1.setField(f2)

Здесь моя проблема в том, что функция setField перезаписывает оба экземпляра класса Player, и я не знаю почему. Я видел другие ответы на аналогичный вопрос, но я не видел, что я сделал неправильно.

1 Ответ

3 голосов
/ 08 февраля 2020

Это потому, что вы ссылаетесь на атрибут класса, а не на экземпляр. Из кода, который вы опубликовали, похоже, что у вас есть некоторый фон в Java, где вы можете указать некоторые переменные в теле класса, а затем ссылаться на них внутри различных конструкторов.

В Python все по-другому. Все, что вы объявляете в области видимости класса, будет совместно использоваться экземплярами класса (особенно если это изменяемая структура данных - например, список).

Если вы хотите, чтобы объекты принадлежали только экземплярам, ​​вам нужно присвоить их «себе» внутри __init__ (и, естественно, нет необходимости указывать их в качестве атрибутов класса):

    def __init__(self, deck):
        self.deck = deck
        self.hand = []
        self.field = []
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...