私のサイトの1つで、いくつかのクラス属性が定義されていて、空ではないかどうかを確認する必要があります。これまでのところ、私は喜んで使用if self.attr:
してきました。これは、私の考えでは、の省略形if self.attr is not None and self.attr is not '':
、または属性の未定義の値が何であれです。
これは正常に機能しますが、複数の文字列属性をチェックすると驚くべき動作になります。(私が予想したように)で'' and ''
はありませんが、 。False
''
これは疑問を投げかけます:and
オペレーターが型キャストを強制しない他のタイプはありbool
ますか?この振る舞いの違いが-clauseの実際の異なる結果を引き起こす例を思いつくことはできませんがif
(結局のところ、''
それでも評価されFalse
ます)、トラップとなる可能性のあるエッジケースがあるという直感が残ります。
最後に、なぜそれがそのように実装されたのか誰かが知っているかどうか知りたいと思いますか?Zen of Pythonは一方向と一方向のみを推奨していると思いましたが、+
演算子はすでに文字列連結の直感的な方法のようです。