在一個類中,如果定義了__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.