python对象的布尔上下文

python对象的布尔上下文,python,oop,python-2.7,python-3.x,Python,Oop,Python 2.7,Python 3.x,我可以在所需的布尔上下文中使用python对象吗? 默认情况下,布尔上下文中的任何对象都是True >>> class Person(): ... pass ... >>> a=Person() >>> bool(a) True 像bool(0)返回False和bool(1)返回True。我可以用任何方法定义一个对象,使其布尔值为True或False。 如果我哪里做错了,请纠正我,谢谢 class Something(

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

>>> class Person():
...           pass
... 
>>> a=Person()
>>> bool(a)
True
bool(0)
返回
False
bool(1)
返回
True
。我可以用任何方法定义一个对象,使其布尔值为
True
False
。 如果我哪里做错了,请纠正我,谢谢

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

print bool(Something())
Take note在Python 3.x中已重命名为

正如在一篇评论中指出的,您最好在类似容器的集合上定义
\uu len\uu
。当
\uuu len\uuu
返回0时,
bool(x)
将计算为False。否则,大于1的任何正数将等于真。

请参阅。它首先检查您的实例是否有
\uuuuu非零
方法,如果没有,则使用
\uuuu len
方法。如果
\uuuu nonzero\uuuu
为False或其长度为0,则该实例为False。


另一个选项是实现
\uuu len\uuu
(像一个容器);return
0
将在布尔上下文中转换为
False
,任何大于1的整数都是
True
@MartijnPieters编辑为include@MartijnPieters感谢您指出上述问题的len方法解决方案。