2011-12-04 7 views
1

何らかの理由で、Pythonの「明示的」ガイドラインにもかかわらず、多くの型が暗黙的にブール値に変換されます。とにかく...暗黙のうちにクラスをboolに変換できるようにするのは慣用的ですか?

適切な場合、カスタムクラスを暗黙的にboolに変換できるようにするのはイディオム的ですか?はいの場合、私はどのような機能を定義すべきですか?私の具体的なケースでは、私はImageクラスを持っています。私はどこか(ファイル)からロードされたデータを保持している場合はTrue、そうでなければFalseとなるようにブールに変換可能にしたいと考えています。

答えて

3

このです。例えば、コンテナオブジェクトは空であるときに偽をテストすべきである。 Python 2.xでは__nonzero__を定義し、Python 3では__bool__を定義して変換を行う必要があります。 Python 2とPython 3をターゲットとするコードを書くときは、両方を定義します。

しかし、「明示的なものは暗黙的なもの」のガイドラインに準拠して、代わりにif img.is_loaded():と言うことができます。主な理由は__nonzero__/__bool__ですが、Pythonのデータモデルの記述に反映されています。 "このメソッドが定義されていない場合は、__len__()が呼び出され、定義されていればそのオブジェクトはtrueとみなされます。 0以外。したがって、おそらくより速いチェックで実装されたlen(obj) == 0の実際の短縮形です。

関連する問題