python对象的布尔上下文

dar*_*rix 5 python oop python-2.7 python-3.x

我可以在所需的布尔上下文中使用python对象吗?默认情况下,任何对象都True在布尔上下文中.

>>> class Person():
...           pass
... 
>>> a=Person()
>>> bool(a)
True
Run Code Online (Sandbox Code Playgroud)

bool(0)返回Falsebool(1)返回一样True.我可以用任何方式定义一个对象,使其具有布尔值True或者False.如果我在任何地方都错了,请纠正我,谢谢.

Jak*_*yer 8

class Something(object):
    def __nonzero__(self):
        return False  # Something is False always. 

print bool(Something())
Run Code Online (Sandbox Code Playgroud)

注意事项__nonzero____bool__在Python 3.x中重命名

正如评论中指出的那样,最好__len__在容器上定义集合.当__len__返回0,bool(x)将评估假.否则,任何大于1的正数都将等于True.

  • 另一种选择是实现`__len__`(就像一个容器); return`0`将在布尔上下文中转换为`False`,任何超过1的整数都是'True`. (3认同)