Список внутри объекта, который внутри списка

govnocoder

Новичок
Пользователь
Фев 27, 2022
3
0
1
Перейду сразу к делу

Python:
class Shop():
    name = ""
    adress = ""
    phones = []

    def add_phone(self, name, phone):
        p = Phone(name, phone)
        self.phones.append(p)

    def get_phones(self):
        result = ""
        for phone in self.phones:
            result += phone.name + " : " + phone.phone + "\n"
        return result

class Phone():
    def __init__(self, name, phone):
        self.name = name
        self.phone = phone

shop = Shop()
shop.name = "eego"
shop.adress = "Пупкина 48"
shop.add_phone("Приемная комиссия", "4343")
shop.add_phone("Основной номер", "1112")



shop1 = Shop()
shop1.name = "Farst"
shop1.adress = "Мафуткина 50"
shop1.add_phone("Поддержка", "4545")
shop1.add_phone("тртр", "7071")


arrayList = []
arrayList.append(shop)
arrayList.append(shop1)

for element in arrayList:
    print("Название: ")
    print(element.name)
    print("Адрес: ")
    print(element.adress)
    print("Номера телефонов: ")
    print( element.get_phones() )
    print("*******************")


При получении списка внутри списка, выводит ВЕСЬ список со всех элементов, почему?

Название:
eego
Адрес:
Пупкина 48
Номера телефонов:
Приеная комиссия : 4343
Основной номер : 1112
Поддержка : 4545
тртр : 7071

*******************
Название:
Farst
Адрес:
Мафуткина 50
Номера телефонов:
Приемая комиссия : 4343
Основной номер : 1112
Поддержка : 4545
тртр : 7071

*******************
[Finished in 3400ms]
 

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
973
220
43
21
Москва
У тебя phones классовый атрибут, он общий для всех объектов. Инициализируй phones в init

Python:
from icecream import ic
ic.disable()

class Shop():
    def __init__(self):
        self.name = ""
        self.adress = ""
        self.phones = []
    def add_phone(self, name, phone):
        p = Phone(name, phone)
        self.phones.append(p)
        ic(self.phones)
    def get_phones(self):
        result = ""
        for phone in self.phones:
            result += phone.name + " : " + phone.phone + "\n"
        return result

class Phone():
    def __init__(self, name, phone):
        self.name = name
        self.phone = phone

shop = Shop()
shop.name = "eego"
shop.adress = "Пупкина 48"
shop.add_phone("Приемная комиссия", "4343")
shop.add_phone("Основной номер", "1112")

shop1 = Shop()
shop1.name = "Farst"
shop1.adress = "Мафуткина 50"
shop1.add_phone("Поддержка", "4545")
shop1.add_phone("тртр", "7071")

arrayList = []
arrayList.append(shop)
arrayList.append(shop1)
ic(shop.get_phones())
for element in arrayList:
    print("Название: ")
    print(element.name)
    print("Адрес: ")
    print(element.adress)
    print("Номера телефонов: ")
    print(element.get_phones())
    print("*******************")
 

govnocoder

Новичок
Пользователь
Фев 27, 2022
3
0
1
а, вот оно как. Получается .name и .adress тоже были общими для всех и оно их перезаписывало. Удивительно, но при выводе итоговых данных проблема была только со списками, спасбиа
 

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
973
220
43
21
Москва
ну имя и адрес ты указывал конкретно для каждого, вручную, а у телефонов только append использовал, вот и получалось что работа с одним списком
 

Форум IT Специалистов