Ответ 1
Вы можете просто del
ваше собственное имя, чтобы вернуть его по умолчанию:
>>> True = False
>>> True
False
>>> del True
>>> True
True
>>>
Итак, я попробовал "злую" вещь, о которой упоминал Нед Дейли в своем ответе здесь. Теперь у меня есть тип True теперь всегда False. Как бы это изменить в интерактивном окне?
Нечего делать:
True = False
Так как True теперь полностью переопределен False, нет очевидного пути к обратному пути. Есть ли модуль, из которого исходит True, я могу сделать что-то вроде:
True = <'module'>.True
Вы можете просто del
ваше собственное имя, чтобы вернуть его по умолчанию:
>>> True = False
>>> True
False
>>> del True
>>> True
True
>>>
Это работает:
>>> 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
Другой способ:
>>> True = 1 == 1
>>> False = 1 == 2
Для полноты: Кевин упоминает, что вы также можете получить реальный True
от __builtins__
:
>>> True = False
>>> True
False
>>> True = __builtins__.True
>>> True
True
Но это также можно переопределить True
:
>>> __builtins__.True = False
>>> __builtins__.True
False
Так лучше пойти с одним из других вариантов.
Просто сделайте следующее:
True = bool(1)
Или, поскольку булевы являются по существу целыми числами:
True = 1
Решения, которые не используют объектные литералы, но столь же прочны, как 1 == 1
. Конечно, вы можете определить False после определения True, поэтому я поставлю решения в виде полупар.
def f(): pass
class A(): pass
True = not f()
False = A != A
False = not (lambda:_).__gt__(_)
True = not (lambda:_).__doc__