Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中对象的布尔值_Python_Boolean - Fatal编程技术网

Python中对象的布尔值

Python中对象的布尔值,python,boolean,Python,Boolean,正如我们所知,Python对对象有布尔值:如果一个类有一个\uuuu len\uuuu方法,那么它的每个实例如果\uuuuu len\uuuu()恰好返回0,就会被计算为布尔值False(例如,空列表) 事实上,如果每个iterable空自定义对象出现在布尔表达式中,则它的计算结果为False 现在假设我有一个属性为bar的类foo。我如何定义它的真值,比如说,如果条%2==0,它将被计算为True,否则它将被计算为False 例如: myfoo = foo() myfoo.bar = 3 de

正如我们所知,Python对对象有布尔值:如果一个类有一个
\uuuu len\uuuu
方法,那么它的每个实例如果
\uuuuu len\uuuu()
恰好返回0,就会被计算为布尔值
False
(例如,空列表)

事实上,如果每个iterable空自定义对象出现在布尔表达式中,则它的计算结果为
False

现在假设我有一个属性为bar的类
foo
。我如何定义它的真值,比如说,如果条%2==0,它将被计算为
True,否则它将被计算为
False

例如:

myfoo = foo()
myfoo.bar = 3
def a(foo):
    if foo:
        print "spam"
    else:
        print "eggs"

因此,
a(myfoo)
应该打印
“鸡蛋”

,请参阅Python文档以获取更多信息


Python中的<3.0:

你必须使用它来实现你想要的。它是Python在布尔上下文中计算对象时自动调用的方法。它必须返回一个将用作计算值的布尔值

例如:

Python中的=>3.0:


同样的事情,除了方法被重命名为更明显的方法。

另请参见:
\uuu nonzero\uuu()
@Wolf,不会。请参考Python 3的其他答案,此答案仅适用于Python 2。
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()
class Foo(object):

    def __init__(self, bar) :
        self.bar = bar

    def __nonzero__(self) :
        return self.bar % 2 == 0

if __name__ == "__main__":
     if (Foo(2)) : print "yess !"