众所周知,Python具有对象的布尔值:如果一个类具有一个__len__方法,则该方法的每个实例__len__()恰好返回0的值都将被评估为布尔值False(例如,空列表)。
__len__
__len__()
False
实际上,每个可迭代的空自定义对象都被评估为False好像它出现在布尔表达式中一样。
现在假设我有一个foo带有attribute的类bar。我如何定义它的真值,这样,也就是说,它会进行评估,True if bar % 2 == 0并False以其他方式?
foo
bar
True if bar % 2 == 0
例如:
myfoo = foo() myfoo.bar = 3 def a(foo): if foo: print "spam" else: print "eggs"
因此,a(myfoo)应打印"eggs"。
a(myfoo)
"eggs"
请参阅Python文档__nonzero__。
__nonzero__
class foo(object): def __nonzero__( self) : return self.bar % 2 == 0 def a(foo): if foo: print "spam" else: print "eggs" def main(): myfoo = foo() myfoo.bar = 3 a(myfoo) if __name__ == "__main__": main()