web-dev-qa-db-ja.com

Pythonのオブジェクトのブール値

ご存知のように、Pythonにはオブジェクトのブール値があります:クラスに___len___メソッドがある場合、__len__()がたまたま0を返すすべてのインスタンスはブール値のFalse(たとえば、空のリスト)として評価されます。

実際、すべての反復可能な空のカスタムオブジェクトは、ブール式で表示される場合、Falseとして評価されます。

ここで、属性fooを持つクラスbarがあるとします。真理値を定義して、たとえば、_True if bar % 2 == 0_およびFalseに評価されるようにするにはどうすればよいですか?

例えば:

_myfoo = foo()
myfoo.bar = 3
def a(myfoo):
    if foo:
        print "spam"
    else:
        print "eggs"
_

したがって、a(myfoo)は_"eggs"_を出力する必要があります。

36
ooboo

__nonzero__ についてはPythonドキュメントを参照してください。

class foo(object):
    def __nonzero__( self) :
        return self.bar % 2 == 0

def a(foo):
    if foo:
        print "spam"
    else:
        print "eggs"

def main():
    myfoo = foo()
    myfoo.bar = 3
    a(myfoo)

if __name__ == "__main__":
    main()
39
sunqiang

In Python <3.0:

使用する必要があります __nonzero__ あなたが望むものを達成するために。これは、ブールコンテキストでオブジェクトを評価するときにPythonによって自動的に呼び出されるメソッドです。評価する値として使用される、ブールを返す必要があります。

例:

class Foo(object):

    def __init__(self, bar) :
        self.bar = bar

    def __nonzero__(self) :
        return self.bar % 2 == 0

if __name__ == "__main__":
     if (Foo(2)) : print "yess !"

In Python => 3.0:

メソッドの名前がはるかにわかりやすい名前に変更されていることを除いて、同じことです __bool__

48
e-satis