Как отменить True = False в интерактивном режиме python?

Итак, я попробовал "злую" вещь, о которой упоминал Нед Дейли в своем ответе здесь. Теперь у меня есть тип True теперь всегда False. Как бы это изменить в интерактивном окне?

Нечего делать:

True = False

Так как True теперь полностью переопределен False, нет очевидного пути к обратному пути. Есть ли модуль, из которого исходит True, я могу сделать что-то вроде:

True = <'module'>.True

Ответ 1

Вы можете просто del ваше собственное имя, чтобы вернуть его по умолчанию:

>>> True = False
>>> True
False
>>> del True
>>> True
True
>>>

Ответ 2

Это работает:

>>> True = False
>>> True
False
>>> True = not False
>>> True
True

но сбой, если False также искажен. Поэтому это лучше:

>>> True = not None

как None не может быть переназначена.

Они также оцениваются до True независимо от того, была ли True переназначена на False, 5, 'foo', None и т.д.:

>>> True = True == True   # fails if True = float('nan')
>>> True = True is True
>>> True = not True or not not True
>>> True = not not True if True else not True
>>> True = not 0

Ответ 3

Другой способ:

>>> True = 1 == 1
>>> False = 1 == 2

Ответ 4

Для полноты: Кевин упоминает, что вы также можете получить реальный True от __builtins__:

>>> True = False
>>> True
False
>>> True = __builtins__.True
>>> True
True

Но это также можно переопределить True:

>>> __builtins__.True = False
>>> __builtins__.True
False

Так лучше пойти с одним из других вариантов.

Ответ 5

Просто сделайте следующее:

True = bool(1)

Или, поскольку булевы являются по существу целыми числами:

True = 1

Ответ 6

Решения, которые не используют объектные литералы, но столь же прочны, как 1 == 1. Конечно, вы можете определить False после определения True, поэтому я поставлю решения в виде полупар.

def f(): pass
class A(): pass
True = not f()
False = A != A
False = not (lambda:_).__gt__(_)
True = not (lambda:_).__doc__