Ответ 1
Определите метод __bool__
(Python 3.x) или __nonzero__
(2.x). Или определите как переносимость, так и один, возвращающий результат другого.
Мне очень удобно проверять, является ли объект "пустым" со следующей конструкцией:
l=[]
if l:
do_stuff()
Для стандартного списка python if
будет выполняться, только если список не пуст.
Мой вопрос в том, как я могу реализовать ту же идею для своих собственных объектов?
Определите метод __bool__
(Python 3.x) или __nonzero__
(2.x). Или определите как переносимость, так и один, возвращающий результат другого.
Внедрите __nonzero__
для Python 2 и __bool__
для Python 3:
class AlwaysTrueObject:
def __bool__(self):
return True
__nonzero__ = __bool__
Если вы реализуете __len__
, Python сделает это для вас в предположении, что длина 0 означает, что объект имеет логическое значение False
и что он имеет логическое значение True
в противном случае.
Если нет смысла реализовывать __len__
, вы можете реализовать __nonzero__
(или __bool__
в 3.x(только имя изменилось)), который должен возвращать либо True
, либо False
в зависимости от логического значения объекта.