1. ホーム
  2. パイソン

[解決済み】「foo is None」と「foo == None」に違いはあるのか?

2022-04-06 20:16:48

質問

との違いはあるのでしょうか?

if foo is None: pass

そして

if foo == None: pass

私がこれまで見てきたPythonのコード(そして私自身が書くコード)は前者でしたが、最近後者を使っているコードに出会いました。 NoneはNoneTypeのインスタンス(そして唯一のインスタンス、IRC)なので、問題ないですよね? 何か問題になるような状況があるのでしょうか?

解決方法は?

is を常に返します。 True 同じオブジェクトのインスタンスを比較した場合

ここで == が最終的に決定されます。 __eq__() メソッド

すなわち


>>> class Foo(object):
       def __eq__(self, other):
           return True

>>> f = Foo()
>>> f == None
True
>>> f is None
False