Ошибка типа: неподдерживаемые типы операндов для +: '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? Это меня смущает. Возможно, я сейчас болтаю как идиот, но это моя единственная идея относительно того, что происходит.

Другие вопросы по тегам