Когда к экземпляру класса применяется функция bool() - явно или неявно - она определяет, считается ли объект "истинным" или "ложным". Напомню: для пустых данных функция выдаёт False, для непустых - True.
Где это может пригодиться? Ваши варианты?
Например, в программах где нужны кастомные проверки истинности объектов ✅
Для настройки этого поведения используют:
-
__bool__ - основной способ-
__len__ - запасной вариантПо умолчанию bool() ВСЕГДА возвращает True для любых экземпляров кастомного класса. Зачем тогда это нужно? 😅
А вот зачем - можно переопределить через магические методы!
Приоритет проверки:
1. Сначала ищется
__bool__2. Если его нет -
__len__() 3. Если и его нет - всегда True
Всё просто! 🎯
Перейдем к практике:
Пусть есть такой простой класс Point:
class Point:
def __init__(self, x, y):
self.x = x
self.y = y
модифицируем len()
def __len__(self):
print('__len__')
return self.x**2 + self.y**2
изменяем bool()
def __bool__(self):
print('__bool__')
return self.x == self.y
Важный нюанс!
__bool__ ОБЯЗАН возвращать True или False ❗️Теперь можно использовать в условных операторах: (bool() вызывается неявно)
p = Point(2, 2)
if p:
print("объект p дает True") # сработает это
else:
print("объект p дает False") # сработает это, если
Как вам такие "магические" методы? 👇
🔥 — Огонь, приму на вооружение!
🤔 — Знал, но освежил память.
💬 — Есть вопросы в комментарии!