ご存知のように、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"
_を出力する必要があります。
__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()
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__
。