Оптимизация True-False флагов

Проблема

У меня в коде, для моего удобства, используется такая конструкция для смены состояния флагов, вне зависимости от их текущего состояния:

flag *= -1

Конструкция довольно удобна, единственный минус в том, что мне не нравится как выглядит её проверка:

if flag == 1:
    print('True')

Проверка флагов True - False, конечно выглядит гораздо лучше:

if flag:
    print('True')

Однако конструкция смены состояния таких флагов заставляет мои глаза течь кровью:

if flag:
    flag = False
else:
    flag = True

Хочется собрать лучшее из этих вариантов:

  1. Возможность проверки без условий
  2. Возможность замены значения в одну (простую) строку

Какие варианты пришли мне в голову:

Метод 1: Класс

Самый логичный и питонячий метод — использовать класс. Минимально у меня получилось что-то такое:

class Flag():
    def __init__(self, val:bool):
        self.val = val
    def __bool__(self):
        return self.val

    def switch(self):
        if self.val:
            self.val = False
        else:
            self.val = True

И это даже работает, но проблема в том, что этот класс довольно неудобно вызывать:

Вместо flag = True надо делать flag = Flag(True). Что может выстрелить чеховским ружьём в самый неожиданный момент, когда я забуду прописать этот класс, или попробую получить значение флага от какого-то не моего метода.

Метод 2: Запихнуть флаг куда-то

Собственно, идея схожа с классом:

def switch(dct: dict):
    if dct['val']:
        dct['val'] = False
    else:
        dct['val'] = True

Минусы: вы вообще представляете как это хранить и проверять? Я представляю, и это максимально неудобно

Метод 3: вспомнить про return

def switch(val):
    if val:
        return False
    else:
        return True

my_flag = True
print(my_flag)
my_flag = switch(my_flag)
print(my_flag)

В целом, норм, но всё равно, мне не особо нравится конструкция my_flag = switch(my_flag).

Собственно вопрос:

А какой, на ваш взгляд, самый оптимальный способ хранения и переключения флагов? Скорее всего существует что-то очень простое, что может делать то, что я хочу, но прям сходу таких методов не нашлось.

Ах да, вопрос сугубо теоретический и скорее даже про "приятно глазу", но суть, в целом, надеюсь ясна


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

Автор решения: Qwertiy
if flag:
    flag = False
else:
    flag = True
flag = not flag
→ Ссылка
Автор решения: Fox Fox

Я с трудом понял эти сложности, а местами и не понял. Но попробую:

flag = True # начальное значение
flag = not flag # смена значения на противоположное
print(flag) # вывод на экран текущего значения
return flag # возврат текущего значения из функции
if flag: # если True...
if not flag: # если False...
flag = flag and my_function() # выполнение my_function() только в случае, если на входе flag = True, и формирование нового флага успешности в результате - для возможности выполнения следующего кода.
→ Ссылка