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.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值