1. ホーム
  2. python

Pythonでクラスの "boolness "を定義する

2023-08-21 13:19:13

質問内容

なぜ素朴に期待したように動かないのでしょうか?

class Foo(object):
    def __init__(self):
        self.bar = 3
    def __bool__(self):
        return self.bar > 10

foo = Foo()

if foo:
    print 'x'
else:
    print 'y'

(出力は x )

どのように解決するのですか?

Python 2-3互換のため、サンプルにこれを追加するだけです。

Foo.__nonzero__ = Foo.__bool__

を含めるか、Fooの元の定義を拡張してください。

__nonzero__ = __bool__

もちろん逆も可能で、その場合はメソッド名が __nonzero__ で、それを __bool__ という名前ですが、私は __nonzero__ は、Pythonがオブジェクトをゼロとの等価性に基づいて真偽を判断するという、オリジナルのC言語的な解釈の遺産に過ぎないのです。 上記の記述を追加するだけで、あなたのコードは Python 2.x で動作し、 Python 3.x にアップグレードしても自動的に動作します (そして、最終的には __nonzero__ ).