Ошибка в класса

после выполнения кода получаю ошибку

batch = [1, 2, 3, 4, 5]
BATCH_FOLDER = 'home/test'

class test:
    def __init__(self, **params):
        if len(batch) > 5:
            BATCH_FOLDER = 'home'
        print(BATCH_FOLDER)


t1 = test()

введите сюда описание изображения

Без if, это работает подскажите в чем дело? Кажется не логичным влияние условия( которое даже не сработало на выполнение)

По решению это проблемы можно прописать global, но мне интереснее почему это происходит

Кажется, что если есть условие с присвоением, то переменная становится локал, можно ли присваивать так, что бы этого не происходило.


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

Автор решения: Zhihar

Вам надо или так:

batch = [1, 2, 3, 4, 5]
BATCH_FOLDER = 'home/test'

class test:
    def __init__(self, **params):
        global BATCH_FOLDER
        if len(batch) > 5:
            BATCH_FOLDER = 'home'
        print(BATCH_FOLDER)


t1 = test()

или так:

batch = [1, 2, 3, 4, 5]
BATCH_FOLDER = 'home/test'

class test:
    def __init__(self, **params):
        BATCH_FOLDER = ''
        if len(batch) > 5:
            BATCH_FOLDER = 'home'
        print(BATCH_FOLDER)


t1 = test()

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

в вашем коде как только вы выполняете присваивание в переменную BATCH_FOLDER Питон понимает, что переменная будет локальной, но присваивание у вас происходит не каждый раз, а только в зависимости от выполнения условия, а затем вы выводите значение переменной BATCH_FOLDER (уже каждый раз)

поэтому получается, что переменная то глобальная, то локальная, и Питон от этого офигевает и выдает ошибку

судя по коду вы хотите работать именно с внешней (глобальной) переменной, поэтому в функции __init__ питону надо бы указать, что переменная BATCH_FOLDER - внешняя

→ Ссылка