Python2.7 類中的__nonzero__方法

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

發佈了50 篇原創文章 · 獲贊 58 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章