Допустим, у меня есть:Какая операция называется A в «while A:»?
class Bar:
pass
A = Bar()
while A:
print("Foo!")
Какую операцию затем вызывается на A
, чтобы определить петлю while
?
Я пробовал __eq__
, но это не помогло.
Допустим, у меня есть:Какая операция называется A в «while A:»?
class Bar:
pass
A = Bar()
while A:
print("Foo!")
Какую операцию затем вызывается на A
, чтобы определить петлю while
?
Я пробовал __eq__
, но это не помогло.
определяемые пользователем объекты 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)
...
>>>
@richard - Невозможность понять код не является подходящей причиной для его редактирования. Эти «запутывающие и нерелевантные шевроны, элипсы» происходят из сеанса интерактивного интерпретатора. – TigerhawkT3
Я также использовал ipython. Я также видел, как мои ученики печатались в шевронах. –
@richard - вопрос явно помечен Python 3 и содержит вызов 'print()' Python 3 (который технически работает в Python 2, но гораздо более вероятно появится в Python 3). – TigerhawkT3
while
statement состоит из while
ключевого слова, за которым следует выражение.
Когда expression is used in a control flow statement значение истины этого выражения вычисляются путем вызова объектов __bool__
метода:
В контексте булевых операций, а также, когда выражения используются показаниями потока управления, следующее значения интерпретируются как ложные:
False
,None
, числовой ноль всех типов и пустые строки и контейнеры (включая строки, кортежи, списки, словари, наборы и фризовые данные). Все остальные значения интерпретируются как истинные.Пользовательские объекты могут настраивать свое значение истинности, предоставляя метод__bool__()
.
Короче говоря, результат зависит от того, что __bool__
вашего возвращения объекта; поскольку вы не указали один, используется значение по умолчанию True
.
Существуют различные методы, которые могут быть вызваны, чтобы определить, оценивает ли объект True
или False
.
Если задан метод __bool__
, это называется, в противном случае, если определено значение __len__
, его результат сравнивается с 0
.
Я думаю, что A является ссылкой на экземпляр бара и, следовательно, не является ложным. –
'bool (A)' Я думаю ... –