如果Python中的语句允许您执行以下操作:
if not x:
print "X is false."
如果你使用的是空列表,空字典,None,0等,这是有效的,但如果你有自己的自定义类怎么办?你能为该类指定一个假值,以便在相同的条件样式中,它将返回false吗?
答案 0 :(得分:22)
您需要在班级上实施__nonzero__
方法。这应该返回True或False来确定真值:
class MyClass(object):
def __init__(self, val):
self.val = val
def __nonzero__(self):
return self.val != 0 #This is an example, you can use any condition
x = MyClass(0)
if not x:
print 'x is false'
如果尚未定义__nonzero__
,则实现将调用__len__
,如果实例返回非零值,则该实例将被视为True。如果尚未定义__len__
,则所有实例都将被视为True。
在Python 3中,使用__bool__
代替__nonzero__
。
答案 1 :(得分:7)
class Foo:
def __nonzero__(self): return False
__bool__ = __nonzero__ # this is for python3
In [254]: if Foo():
.....: print 'Yeah'
.....: else: print 'Nay'
.....:
Nay
或者,如果你想要超便携,你可以只定义__len__
,这对两种语言都有相同的效果,但是它有(潜在的)缺点,它暗示你的对象有一个有意义的长度测量(可能没有)。
这适用于任何实例,具体取决于您在方法中添加的实际逻辑。