Python

Pythonの == None と is Noneの違い

更新日:

Pythonでのnull判定ではis Noneを使います。
== None でも判定はできますがis Noneの方が良いとされています。

理由は== が同値性のチェックであり、
is が同一性のチェックであるためです。

詳しくは「PyQ」の公式ブログをご覧ください。

つまりどういうことだってばよ?

上記公式ブログの一番下に具体例がありますが、まだPythonの勉強を始めて間もないため、
そもそも具体例のコードがよくわかりませんでした。

以下引用となります。

この__eq__の部分ですね。ここを理解していないと結果の部分が理解できない気がします笑

__eq__を定義することで == の結果を制御できる!

この__eq__を定義することで、どういう比較の場合にTrueを返して欲しいかの制御が行えます。
==__eq__ と同義と考えてよいと思います。
要するに上記のFoo()クラスはどんな値と比較してもTrueが返ってくるというコードだったわけです。
上記の例をちょっと書き換えて見てみましょう。

こんな感じで__eq__のみ定義したFooクラスは、文字列 'a'と比較したときだけTrueを返すようにできるわけですね。ちなみに is はこういうことができないです。

つまり、== の挙動っていうのはユーザー側でどうとでもできるので、厳密なnullチェックをやりたいなら is None を使おうねってことですね。

演算子のオーバーライドに関してはYohei Munesadaさんのブログも参考になると思うので、
載せておきます。便利ですが使い過ぎに要注意ですね笑

javaでも.equalsメソッドをオーバーライドすることで比較の制御ができますね。(やったことないですけど)
Pythonでいまいち今回の内容が頭に入ってこなかったのは、
javaだと同一性の比較が==であり、同値性の比較が.equalsだからかもしれません笑

-Python
-

Copyright© すとらぐりんぐSE , 2021 All Rights Reserved.