python对象的布尔上下文
我可以在所需的布尔上下文中使用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(
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
(像一个容器);return0
将在布尔上下文中转换为False
,任何大于1的整数都是True
@MartijnPieters编辑为include@MartijnPieters感谢您指出上述问题的len方法解决方案。