2016-11-22 4 views
3

Допустим, у меня есть:Какая операция называется A в «while A:»?

class Bar: 
    pass 
A = Bar() 

while A: 
    print("Foo!") 

Какую операцию затем вызывается на A, чтобы определить петлю while?

Я пробовал __eq__, но это не помогло.

+0

Я думаю, что A является ссылкой на экземпляр бара и, следовательно, не является ложным. –

+1

'bool (A)' Я думаю ... –

ответ

6

определяемые пользователем объекты truthy, если не определить пользовательские __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

@richard - Невозможность понять код не является подходящей причиной для его редактирования. Эти «запутывающие и нерелевантные шевроны, элипсы» происходят из сеанса интерактивного интерпретатора. – TigerhawkT3

+0

Я также использовал ipython. Я также видел, как мои ученики печатались в шевронах. –

+0

@richard - вопрос явно помечен Python 3 и содержит вызов 'print()' Python 3 (который технически работает в Python 2, но гораздо более вероятно появится в Python 3). – TigerhawkT3

2

while statement состоит из while ключевого слова, за которым следует выражение.

Когда expression is used in a control flow statement значение истины этого выражения вычисляются путем вызова объектов __bool__ метода:

В контексте булевых операций, а также, когда выражения используются показаниями потока управления, следующее значения интерпретируются как ложные: False, None, числовой ноль всех типов и пустые строки и контейнеры (включая строки, кортежи, списки, словари, наборы и фризовые данные). Все остальные значения интерпретируются как истинные.Пользовательские объекты могут настраивать свое значение истинности, предоставляя метод __bool__().

Короче говоря, результат зависит от того, что __bool__ вашего возвращения объекта; поскольку вы не указали один, используется значение по умолчанию True.

1

Существуют различные методы, которые могут быть вызваны, чтобы определить, оценивает ли объект True или False.

Если задан метод __bool__, это называется, в противном случае, если определено значение __len__, его результат сравнивается с 0.