python3: как использовать для l oop и если операторы над атрибутами класса? - PullRequest
3 голосов
/ 10 января 2020

У меня есть следующий класс:

class equipment:
    def __init__(self, name, location, status):
        self.name = name
        self.location = location
        self.status=status 

class device(equipment):
    def __init__(self, name, location,status):
        super().__init__(name, location,status)


device1 = device("device1 ", (5, 2), 0)
device2 = device("device2", (10, 2), 0)
device3 = device("device3", (15, 3), 0)
device4 = device("device4", (5, 5), 0)

all_devices = ['device1', 'device2', 'device3', 'device4']

и на основе другого кода: я получаю status_devices = [1,0,1,1], поэтому я хотел обновить исходный статус, используя для l oop и оператор if (для печати только устройства, имеющего статус = 1),

for n in range(0, 4):
    all_devices[n].status=status_devices[n]

таким образом выдает мне ошибку: у объекта str нет атрибута status

Спасибо

Ответы [ 2 ]

4 голосов
/ 10 января 2020

Проблема, вызывающая упомянутую вами ошибку, заключается в том, что у вас есть

all_devices = ['device1', 'device2', 'device3', 'device4']

, а не

all_devices = [device1, device2, device3, device4]

(то есть вы создали список строк, а не список устройств объекты.)

1 голос
/ 10 января 2020

Вы должны хранить в переменной all_device экземпляры для класса device:

all_devices = [device1, device2, device3, device4]

, а не строки:

all_devices = ['device1', 'device2', 'device3', 'device4']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...