让我说我有:
class Bar:
pass
A = Bar()
while A:
print("Foo!")
然后在A
上调用什么操作来确定while
循环?
我尝试__eq__
,但这并没有做太多。
答案 0 :(得分:6)
除非您定义自定义__bool__
:
>>> class A:
... pass
...
>>> a = A()
>>> if a: print(1)
...
1
>>> class B:
... def __bool__(self):
... return False
...
>>> b = B()
>>> if b: print(1)
...
>>>
答案 1 :(得分:2)
while
statement由while
关键字后跟表达式组成。
当通过调用对象__bool__
方法评估该表达式的真值expression is used in a control flow statement时:
在布尔运算的上下文中,当控制流语句使用表达式时,以下值被解释为false:
False
,None
,数字零所有类型,空字符串和容器(包括字符串,元组,列表,字典,集合和frozensets)。 所有其他值都被解释为true。 用户定义的对象可以通过提供__bool__()
方法来自定义其真值。
简而言之,结果取决于对象的__bool__
返回的内容;由于您尚未指定,因此使用默认值True
。
答案 2 :(得分:1)
可以调用不同的方法来确定对象是评估为True
还是False
。
如果定义了__bool__
- 方法,则会调用此方法,否则,如果定义了__len__
,则会将其结果与0
进行比较。