在一个类中,如果定义了__nonzero__函数,那么该类的实例被转换为布尔值的时候,就会用到该方法。直接用代码来说明:
# encoding=utf8
class Test1():
pass
class Test2():
def __nonzero__(self):
print "I'm False"
return False
print bool(Test1())
print '-' * 20
print bool(Test2())
输出:
True
--------------------
I'm False
False
通过结果可以知道,正常情况下,用bool函数调用一个类的实例的时候,返回为True;但是如果类的内部定义了__nonzero__函数并return False,那么将该类的实例转换为布尔值的时候就会返回False,同时也执行了__nonzero__函数内部的代码。所以,是不是可以这样使用:
# encoding=utf8
class Test2():
def __init__(self, num):
self.num = num
def __nonzero__(self):
print 'num is: %s' % self.num
return self.num > 0
test = Test2(4)
print bool(test)
print '-' * 20
test = Test2(-1)
print bool(test)
结果:
num is: 4
True
--------------------
num is: -1
False
找到一段这样的描述可以用来参考__nonzero__的用法:
If a class defines it, this special method is called whenever an instance is converted to a Boolean value, either implicitly (for example, when it is the test in an “if” statement) or explicitly via the built-in bool() function.