Когда можно самостоятельно == Нет

Я смотрю на фрагмент if not self: в ответе на другой вопрос, который реализует __nonzero__(),

Это заставляет меня задуматься: кроме __nonzero__() возврате False или тривиальное местное назначение self = NoneСуществуют ли другие ситуации, в которых if not self правда?

1 ответ

Решение

Согласно документации Python по проверке истинности значения:

Любой объект может быть проверен на истинность, для использования в if или же while условие или как операнд логических операций ниже.

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

В коде, на который вы ссылаетесь, __nonzero__() является эквивалентом Python 2 Python 3 __bool__(),

Итак, альтернатива __bool__() Метод в вашем вопросе может быть что-то вроде:

class Lenny:

    def __len__(self):
        return 0 if self.value == '#' else len(self.children)

Примечание. Ничто из этого не имеет ничего общего с названием вашего вопроса: "Когда можно самостоятельно == Нет". Равенство (стоит ли None или к чему-либо еще) - это понятие, отличное от истинного значения, и определяется __eq__() метод:

class Nonelike:

    def __eq__(self, other):
        return other == None
Другие вопросы по тегам