Почему элемент добавляется не в тот список Python
Файл 1 (модуль):
class Page:
def step(self):
print('Лала')
children = list()
# parent = str()
# name = str()
# numbering = str()
# func = step
def __init__(self, numbering, parent, name='Страница', func=step):
self.parent = parent
self.name = name
self.numbering = numbering
self.func = func
def __str__(self):
return self.name
def add_children(self, name, func=step):
new_numb = str(len(self.children))
a = Page(numbering=new_numb, parent=self.numbering, name=name, func=func)
self.children.append(a)
Файл 2 (основной код):
from SNmenu import *
menu = Page(name='menu', numbering='0', parent=None)
menu.add_children(name='Страница 1')
menu.add_children(name='Страница 2')
menu.add_children(name='Страница 3')
menu.add_children(name='Страница 4')
menu.children[0].add_children(name='Страница 1.1')
menu.children[0].add_children(name='Страница 1.2')
menu.children[1].add_children(name='Страница 2.1')
menu.children[2].add_children(name='Страница 3.1')
if menu.children == menu.children[0].children:
print('Списки одинаковы')
Я хочу чтобы код работал вот так:

Ответы (1 шт):
Автор решения: CrazyElf
→ Ссылка
class Page:
children = list()
Так перенесите children = list() в __init__ и сделайте его полем экземпляра класса. Тогда у каждого экземпляра класса Page будет свой список страниц:
def __init__(self, numbering, parent, name='Страница', func=step):
self.children = list()
...
Сейчас у вас children является полем класса и инициализируется один раз - при создании класса, и все экземпляры класса работают с self.children как с одним и тем же списком Page.children по факту. Просто когда создаётся экземпляр класса, он получает себе все поля, которые есть у класса и работает дальше с ними как со своими полями.
