それで、私はネッド・デイリーが彼の答えで言及した「邪悪な」ことを試みました ここ 。これで、タイプ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
as None
は再割り当てできません。
これらは、True
がTrue
、5
、'foo'
、False
などに再割り当てされたかどうかに関係なく、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
完全を期すために、Kevinは、__builtins__
から実際のTrue
をフェッチすることもできると述べています。
>>> True = False
>>> True
False
>>> True = __builtins__.True
>>> True
True
しかし、そのTrue
はオーバーライドすることもできます:
>>> __builtins__.True = False
>>> __builtins__.True
False
他のオプションのいずれかを使用することをお勧めします。
これを行うだけです:
True = bool(1)
または、ブール値は本質的に整数であるため:
True = 1
オブジェクトリテラルを使用しないが、1 == 1
。もちろん、Trueが定義されたらFalseを定義できるため、ソリューションをハーフペアとして提供します。
def f(): pass
class A(): pass
True = not f()
False = A != A
False = not (lambda:_).__gt__(_)
True = not (lambda:_).__doc__