Ошибка типа: неподдерживаемые типы операндов для +: 'int' и 'instance'
Я не очень хорош в Python, я знаю, что с моим классом что-то не так, но я не уверен, что с ним не так. Это кажется довольно общей проблемой, но по какой-то причине мне трудно понять почему.
class distance:
def distance(operator_location,local_location):
global hsff_conveyor
global hsff_unload
global hsdr_conveyor
global hsdr_unload1
global hsdr_unload2
global distance_between_hsff_load_and_hsff_unload
global distance_between_hsff_load_and_hsdr_load
global distance_between_hsff_load_and_hsdr_unload1
global distance_between_hsff_load_and_hsdr_unload2
global distance_between_hsff_and_hsdr_conveyor
global distance_between_hsff_unload_and_hsdr_unload1
global distance_between_hsff_load_and_hsdr_unload2
global distance_between_hsdr_load_and_hsdr_unload1
global distance_between_hsdr_load_and_hsdzr_unload2
global distance_between_hsdr_unload1_and_unload2
if operator_location==hsff_conveyor and local_location==hsff_unload:
return distance_between_hsff_load_and_hsff_unload
elif operator_location==hsff_conveyor and local_location==hsdr_conveyor:
return distance_between_hsff_load_and_hsdr_load
elif operator_location==hsff_conveyor and local_location==hsdr_unload1:
return distance_between_hsff_load_and_hsdr_unload1
elif operator_location==hsff_conveyor and local_location==hsdr_unload2:
return distance_between_hsff_load_and_hsdr_unload2
elif operator_location==hsff_unload and local_location==hsdr_conveyor:
return distance_between_hsff_and_hsdr_conveyor
elif operator_location==hsff_unload and local_location==hsdr_unload1:
return distance_between_hsff_unload_and_hsdr_unload1
elif operator_location==hsff_unload and local_location==hsdr_unload2:
return distance_between_hsff_unload_and_hsdr_unload2
elif operator_location==hsdr_conveyor and local_location==hsdr_unload1:
return distance_between_hsdr_load_and_hsdr_unload1
elif operator_location==hsdr_conveyor and local_location==hsdr_unload2:
return distance_between_hsdr_load_and_hsdr_unload2
elif operator_location==hsdr_unload1 and local_location==hsdr_unload2:
return distance_between_hsdr_unload1_and_unload2
else:
return int(0)
Возвращает ошибку в заголовке, когда попадает сюда:
def hsff_fill_conveyor(env, operator, logfile):
global hsff_pick_and_load_time
global conveyor
global hsff_conveyor_holds
global operator_location
global total_walk
global total_walk_time
global hsff_conveyor
global hsff_unload
local_location=hsff_conveyor
while True:
if operator_location==hsff_conveyor:
hsff_start_loading_conveyor=env.now
yield hsff_raw_container_cont.get(hsff_pick_quantity)
hsff_conveyor_short_time=env.now-hsff_start_loading_conveyor
with operator.request() as req1:
yield req1
hsff_conveyor_waiting_for_operator=env.now-hsff_start_loading_conveyor
yield env.timeout(hsff_pick_and_load_time)
hsff_load_cycle_ende=env.now
yield hsff_conveyor_cont.put(hsff_pick_quantity)
elif operator_location!=hsff_conveyor:
hsff_operator_ready_to_walk=env.now
hsff_operator_ready_to_walk_short_time=env.now-hsff_operator_ready_to_walk
with operator.request() as req1:
yield req1
hsff_conveyor_waiting_for_operator=env.now-hsff_operator_ready_to_walk
yield env.timeout(20) #FILLER
walk_end=env.now
total_walk=total_walk + distance() + 1
operator_location=hsff_conveyor
total_walk = total_walk + distance() + 1
поднимает ошибку. У меня это происходит и в других строках. Попытка смоделировать оператора, который имеет пять различных ресурсов, которые могут запросить его.
РЕДАКТИРОВАТЬ: +1 не должно быть в строке total_walk. Я просто использовал это, чтобы проверить, работало ли это некоторое время назад. Мозг зажарен, и я почему-то подумал, что это достаточно важно, чтобы уйти. Opps.
3 ответа
Во-первых, у вашего класса дистанции нет __init__
метод, который является проблемой. Затем вы получаете свою ошибку, потому что вы пытаетесь добавить distance()+1
но делает distance()
создает экземпляр класса расстояния вместо того, чтобы фактически вызывать функцию внутри него, как вы и предполагали. Вам нужно назначить переменную, как d = distance()
и делать d.distance(operator_location, global_location)+1
или просто distance().distance(operator_location, global_location)+1
,
Кроме того, кажется, что вы на самом деле не используете расстояние как класс, а скорее предназначены для создания глобальной функции, так что вы также можете просто избавиться от class distance
линии и не нужно иметь дело со всеми вещами экземпляра класса (вы бы просто сделать distance(operator_location, global_location)+1
).
В этих двух строках:
class distance:
def distance(operator_location,local_location):
...
Вы создаете класс distance
который содержит метод, также называемый distance
, Это почти наверняка не то, что вы намерены. Из сигнатуры вашего метода и его использования я делаю вывод, что вы пытаетесь создать глобальную функцию.
Удалите первую из двух строк и сдвиньте отступ метода на один шаг влево:
def distance(operator_location,local_location):
...
Из того, что я могу сказать, убедитесь, что все добавляемые числа являются целыми числами
total_walk=total_walk + distance() + 1
Является ли total_walk и distance() целым числом при добавлении 1? Это меня смущает. Возможно, я сейчас болтаю как идиот, но это моя единственная идея относительно того, что происходит.