crystal ball photography 3894871 1280 min
Автор: CoolPython
Методы с двойным подчеркиванием в начале и в конце, например, __eq__, __hash__, __init__, в Python называют магическими методами. Их назвали так потому, что они добавляют магию в поведение класса.
Например, метод __init__ неявно вызывается при инициализации объекта:
Foo:
def __init__(self, a, b):
self.a = a
self.b = b
foo = Foo(7, 9) # вызывается __init__
print(foo.a, foo.b) # 7, 9 Но сегодня я хочу поговорить о магичесом методе __bool__. В тех классах, где этот метод определен, он сообщает интерпретатору, как оценить булево значение произвольного объекта.
Зачем нам это? Это нестареющая классика: чтобы проверить словарь или список на непустоту, начинающие часто используют стиль, как в C++:
if len(a) != 0:
pass
В то время как PEP8 рекомендует делать просто:
if not a:
pass И это работает ровно потому, что в момент if a: вызывается метод __bool__ класса список.
Для пользовательских объектов, где __bool__ не перегружен, по умолчанию возвращается True.
if foo:
print(True)
else:
print(False)
# True Но если добавить
Foo:
def __init__(self, a, b):
self.a = a
self.b = b
def __bool__(self):
return False То поведение изменится:
if foo:
print(True)
else:
print(False)
# False Кстати, в случае, если метода __bool__ в классе нет, то интерпретатор будет искать метод __len__ (длина). Поведение такое же: если __len__ возвращает 0, то логическое значение оценивается как False.
Что с этим делать? Помнить, что falsy (значения, которые оцениваются как False) в Python это:
range(0), None и собственно FalseА truthy значения это:
TrueИ писать проверку на непустоту красиво:
not a:
pass Если вы ищете работу на Python, на Talanto.work сейчас есть варианты для junior, middle, senior…
Рынок Python-вакансий большой, но удобным его назвать сложно. Формально вакансий много, однако в реальном поиске…
Срезы в Python — это больше, чем a[2:7]. В статье — быстрый разбор полезных приёмов:…
В этой статье мы рассмотрим возведение в степень в Python с помощью различных методов, от…
Дубликаты в списке Python — частая проблема. В статье показано, как быстро убрать повторы, в…
Услуга виртуального хостинга на SpaceWeb позволяет арендовать часть сервера (shared-сервера) и разместить на нём свой…