1

次のクラス定義を検討してください。

class Symbolic(object):
    def __eq__(self, rhs):
        return Symbolic()
    def __le__(self, rhs):
        return Symbolic()
    def __gt__(self, rhs):
        return Symbolic()
    def __contains__(self, other):
        return Symbolic()

クラスで定義された操作は次のように動作します。

x = Symbolic()
y = Symbolic()

x == y    -->   <Symbolic object at ...>
x <= y    -->   <Symbolic object at ...>
x > y     -->   <Symbolic object at ...>
y in x    -->   True  # huh?

タイトルによると、私の質問は次のとおりです。Python ランタイムがin演算子の出力をブール型に==明示的に強制するのはなぜですか?<=>

編集:ドキュメントでは、in演算子と豊富な比較についてそれぞれ次のように述べています。

  • __contains__()メソッドを定義するユーザー定義クラスの場合、x in yが true の場合にのみtrue になりy.__contains__(x)ます。

  • 慣例により、比較が成功すると False と True が返されます。ただし、これらのメソッドは任意の値を返すことができるため、比較演算子がブール コンテキスト (if ステートメントの条件など) で使用されている場合、Python は値に対して bool() を呼び出して、結果が true か false かを判断します。 .

問題はまだ残っています: なぜ区別が必要なのですか?

4

0 に答える 0