オブジェクトはPythonでどのような真理値を評価するのですか?Pythonのブール式の評価
関連の質問
- Boolean Value of Objects in Python:削除MEDERのポスト
と重複するすべてのINFOMATIONをPythonでカスタムオブジェクトの場合:それは
オブジェクトはPythonでどのような真理値を評価するのですか?Pythonのブール式の評価
関連の質問
と重複するすべてのINFOMATIONをPythonでカスタムオブジェクトの場合:それは
任意のオブジェクトは、IFまたは一方 状態で以下のブール 演算のオペランドとして使用するために、真理 値について試験することができます。偽と見なされ 次の値:例えば任意の数値型の
ゼロ
偽
なし、
0
、0L
、0.0
、0j
。任意の空の配列、例えば、
''
,()
,[]
。任意の空のマッピングです(例:
{}
)。ユーザ定義クラスのインスタンス、クラスがそのメソッドが整数ゼロまたはブール値を返し
False
__nonzero__()
または__len__()
方法を定義している場合。他のすべての値をtrue と考えられている - 多くの種類のオブジェクトは常に真であるようにします。 ブール演算結果を持つ演算と組み込み関数は、特に指定がない限り、falseの場合は0または
False
を、trueの場合は1またはTrue
を返します。 (重要な例外:ブール演算「または」と「と」は常にそのオペランドの1つを返します。)
https://docs.python.org/2/library/stdtypes.html#truth-value-testing
そして前述のように、あなたはゼロ以外変更することで、カスタムオブジェクトを無効にすることができます。
更新に評価される方法をオーバーライドすることについての議論< 3.0 __nonzero__
評価方法を変更するed。 Python 3.0では、これは__bool__
(Reference by e-satis)です。
評価が意味することを理解することは重要です。 1つの意味は、オブジェクトが明示的にブールにキャストされているか、またはその位置によって暗黙的にキャストされている(ifまたはwhileループ内)場合です。
もう1つは==評価です。 1 ==真、0 ==偽、それ以外は等しい==。
>>> None==False
False
>>> 1==True
True
>>> 0==False
True
>>> 2==False
False
>>> 2==True
False
最後に、trueまたはfalseのみがそれ自身です。
カスタムオブジェクトは、__nonzero__を実装することで真偽値評価に対してTrue/Falseを返すことができます。 – dcrosta
Python 3.0で__bool__をオーバーライドする必要があることに注意する必要があります。 – Casebash
引用したドキュメントは不正確です。たとえば、セットはシーケンスでもマッピングでもなく、空の場合もfalseです。私はこれらの2つの行(セットの場合も含む)を「空の**コンテナ**」に崩壊させます。 –