Как присвоить скрипт одномерного массива для каждого нового элемента другого списка

прошу помочь с заданием, нужно реализовать работу некоторого количества устройств, с заданными параметрами в виде списка. Необходимо вводить устройства, но так, чтобы для каждого нового срабатывали параметры. Вопрос состоит в том, как присвоить каждому новому элементу одномерного массива device_names рандомные значения всех трех элементов в списке sensor_names? Пока что значения и элементы массива работают отдельно друг от друга, я же пытаюсь добиться их взаимосвязи, то-есть: при добавлении двух устройств, допустим new_1 и new_2 - результат должен выглядеть примерно так: Длина объекта new_1 составляет - случайное значение Ширина объекта new_1 составляет - 14 Высота объекта new_1 составляет - 99 Длина объекта new_2 составляет - 11 Ширина объекта new_2 составляет - 14 Высота объекта new_2 составляет - 99

Ниже привожу свой код, подскажите как реализовать задуманное?

import sys
import time
import random
from threading import Thread

device_names = []
sensor_names = ["Длина","Ширина","Высота"]

class Item:
    def __init__(self):
        self.sensors = []
        for name in sensor_names:
            self.sensors.append(Sensors(name))

class Sensors(Thread):
    def __init__(self, value):
        Thread.__init__(self)
        self.value = value

    def run(self):

        self.value_random = random.randint(0, 100)
        msg = f"%s объекта составляет - {self.value_random}" % self.value
        print(msg)

def sensors_threads():
    for name in sensor_names:
        Sensors(name).start()

if __name__ == "__main__":
    item = []
    number_of_devices = int(input("Введите количество подключаемых устройств:"))
    for _ in range(number_of_devices):
        new_device = input("Введите название устройств:")
        item.append(new_device)

    device_names.extend(item)
    sensors_threads()

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

Автор решения: Andy Pavlov

Я бы разделил на три класса: Sensor, Item, Items. В Items хранятся все устройства и методы работы с ними, в Item хранятся сенсоры и методы работы с ними, в Sensor есть метод выдачи данных. Ниже вариант представления.

import random

class Item:
    def __init__(self):
        self.sensors = {}  # Сенсоры
        self.responses = {}  # Данные по сенсорам

    def add_sensor(self, sensor_id: str, sensor: object):
        self.sensors[sensor_id] = sensor
        self.responses[sensor_id] = self.sensors[sensor_id].get_data()

    def update_sensors(self):
        for sensor_id in self.sensors:
            self.responses[sensor_id] = self.sensors[sensor_id].get_data()

    def get_info(self):
        return ', '.join(['{}: {}'.format(sensor_id, self.responses[sensor_id]) for sensor_id in self.responses])


class Items:
    def __init__(self):
        self.items = {}  # Устройства

    def add_item(self, item_id, item: object):
        self.items[item_id] = item

    def get_ids(self):
        return self.items.keys()

    def get_info(self):
        return ['Объект {}. Параметры: {}'.format(item_id, self.items[item_id].get_info()) for item_id in self.items]


class Sensor:
    def get_data(self):
        return random.randint(0, 100)

# На базе этого делаем __main__
device_names = ['new_1', 'new_2']
sensor_names = ["Длина","Ширина","Высота"]

devices = Items()
for device_name in device_names:
    devices.add_item(device_name, Item())

for item_id in devices.get_ids():
    for sensor_id in sensor_names:
        devices.items[item_id].add_sensor(sensor_id, Sensor())

print(devices.get_info())
# ['Объект new_1. Параметры: Длина: 45, Ширина: 4, Высота: 4', 'Объект new_2. Параметры: Длина: 69, Ширина: 18, Высота: 50']
→ Ссылка