As we know, Python has boolean values for objects: If a class has a __len__
method, every instance of it for which __len__()
happens to return 0 will be evaluated as a boolean False
(for example, the empty list).
In fact, every iterable, empty custom object is evaluated as False
if it appears in boolean expression.
Now suppose I have a class foo
with attribute bar
. How can I define its truth value, so that, say, it will be evaluated to True if bar % 2 == 0
and False
otherwise?
For example:
myfoo = foo()
myfoo.bar = 3
def a(foo):
if foo:
print "spam"
else:
print "eggs"
so, a(myfoo)
should print "eggs"
.
In Python < 3.0 :
You have to use __nonzero__
to achieve what you want. It's a method that is called automatically by Python when evaluating an object in a boolean context. It must return a boolean that will be used as the value to evaluate.
EG :
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 :
Same thing, except the method has been renamed to the much more obvious __bool__
.
__nonzero__
: Refer to the Python 2 docs for __nonzero__
.
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()
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.