добавляет дубликат в следующий объект - PullRequest
0 голосов
/ 29 мая 2020

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

from random import *
class Army:
    divisions = []
    def __init__(self, name):
        self.name = name
def rnd(max):
    return randint(0, max - 1)  
def init_army(i):
    army = Army(names[i])
    armies.append(army)
    divisions = rnd(num_divisions) + 1
    for i in range(divisions):
        army.divisions.append(rnd(num_divisions) + 1)
names = ["name1", "name2"]
armies = []
num_armies = 2
num_divisions = 6
for i in range(num_armies):
    init_army(i)
    print(armies[i].name, armies[i].divisions)
Typical Output:
name1 [5, 1]
name2 [5, 1, 2, 5, 6, 2, 1]

1 Ответ

0 голосов
/ 29 мая 2020

Строки

class Army:
    divisions = []

делают divisions атрибут класса.

Превратите его в атрибут экземпляра:

class Army:

    def __init__(self, name):
        self.divisions = []
        self.name = name

В python есть без декларации. Вместо этого имена (переменные и атрибуты) определяются путем присвоения.

Имеет значение, где вы назначаете вещи.

Пожалуйста, посмотрите на пространства имен

...