在“A:”中对A进行了什么操作?

时间:2016-11-22 17:56:35

标签: python python-3.x class while-loop operation

让我说我有:

class Bar:
    pass
A = Bar()

while A:
    print("Foo!")

然后在A上调用什么操作来确定while循环?

我尝试__eq__,但这并没有做太多。

3 个答案:

答案 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 statementwhile关键字后跟表达式组成。

当通过调用对象__bool__方法评估该表达式的真值expression is used in a control flow statement时:

  

在布尔运算的上下文中,当控制流语句使用表达式时,以下值被解释为false:FalseNone,数字零所有类型,空字符串和容器(包括字符串,元组,列表,字典,集合和frozensets)。 所有其他值都被解释为true。 用户定义的对象可以通过提供__bool__()方法来自定义其真值。

简而言之,结果取决于对象的__bool__返回的内容;由于您尚未指定,因此使用默认值True

答案 2 :(得分:1)

可以调用不同的方法来确定对象是评估为True还是False

如果定义了__bool__ - 方法,则会调用此方法,否则,如果定义了__len__,则会将其结果与0进行比较。