Как добавить дополнительную информацию в массив?

Всем привет, имеется файлик ips с содержимым:

Novostroya10 = '10.200.176.98'
ERA47 = '10.200.176.114'
EKBPolev37= '10.200.176.106'

Дальше, я в коде открываю через import ips и создаю список:

LibraryIPS = [ips.Novostroya10, ips.ERA47, ips.EKBPolev37]

Можно ли добавить дополнительную информацию к содержимому и вывести его через print? Хотелось бы к каждому элементу добавить описание, чтобы было понимание что это за адрес.


Ответы (1 шт):

Автор решения: insolor

Будем считать, что у вас не учебная задача, а прикладная, поэтому покажу сразу на основе датаклассов, а не просто классов. Соответственно, требуемая версия Python - 3.7 или выше, ну или 3.6, но нужно установить пакет dataclasses (pip install dataclasses).

Сначала описываем класс с нужными полями для хранения ip и дополнительной информации (описания, например), потом создаем объекты этого класса. За счет того, что это датакласс, у него автоматом создаются методы __init__, __repr__ и т.д. под указанные в классе поля. Соответственно, из каждого объекта можно по имени поля вытащить значения.

from dataclasses import dataclass


@dataclass
class IP:
    ip: str
    description: str


Novostroya10 = IP('10.200.176.98', "Новостроя 10")
ERA47 = IP('10.200.176.114', "ЭРА 47")
EKBPolev37 = IP('10.200.176.106', "ЕКБ Полев 37")

LibraryIPS = [Novostroya10, ERA47, EKBPolev37]

print(LibraryIPS)
# [IP(ip='10.200.176.98', description='Новостроя 10'), IP(ip='10.200.176.114', description='ЭРА 47'), IP(ip='10.200.176.106', description='ЕКБ Полев 37')]

print(LibraryIPS[0])
# IP(ip='10.200.176.98', description='Новостроя 10')

print(LibraryIPS[0].ip)
# 10.200.176.98

На всякий случай вот описание обычного класса с минимальной функциональностью, который даст такой же вывод на примере выше, как и датакласс:

class IP:
    def __init__(self, ip: str, description: str):
        self.ip = ip
        self.description = description

    def __repr__(self):
        return f"{self.__class__.__name__}(ip={self.ip!r}, description={self.description!r})"
→ Ссылка