我正在尝试访问包含类实例的列表的值
class Slot:
def __init__(self, slot, available):
self.slot = slot
self.available = available
for i in range(rangeHours):
timeSlots.append(i)
timeSlots[i] = Slot(hours[i],free[i])
for call in calls:
if call == 1:
for i in timeSlots:
if timeSlots[i].available == True:
patient[i] = Patient(timeSlots[i].slot)
timeSlots[i].available == False
如果timeSlots [i] .available == True: TypeError:列表索引必须是整数或切片,而不是Slot
感谢您的帮助。
答案 0 :(得分:1)
您应该使用 dict 而不是 list 。您也可以将 list 用于相同的目的,但不能用于构造代码。为什么?让我们详细了解您在做什么:
# Lets say you have an empty list:
time_slots = []
您遍历整数并将其附加到列表中
for i in range(rangeHours):
time_slots.append(i)
第一次迭代后,您将列出:
# time_slots = [0]
然后,您将访问刚刚使用它作为索引附加的相同元素:
# time_slots[0] = 0 , which in this case, the element you accessed is 0
然后您将此元素更改为您的 Slot 类:
# time_slots[0] = Slot(hours[0],free[0])
这将直接覆盖您刚刚放入列表中的内容。简而言之,time_slots.append(i)无效。
我认为您应该改用 dict :
time_slots = {}
for i in range(rangeHours):
time_slots[i] = Slot(hours[i],free[i])
那么您可以做:
for call in calls:
if call == 1:
for slot_index, slot_class in time_slots.items():
if slot_class.available == True:
patient[slot_index] = Patient(slot_class.slot)
slot_class.available == False