2014-01-24 3 views
5

Можно ли использовать объект python в нужном булевом контексте? По умолчанию любой объект равен True в булевом контексте.boolean context объекта python

>>> class Person(): 
...   pass 
... 
>>> a=Person() 
>>> bool(a) 
True 

Как bool(0) возвращает False и bool(1) возвращает True .Can у меня есть какой-либо способ определить объект, чтобы иметь это логическое значение, либо True или False. Исправьте меня, если я не прав, спасибо.

ответ

8
class Something(object): 
    def __nonzero__(self): 
     return False # Something is False always. 

print bool(Something()) 

Примите к сведению __nonzero__ был переименован в __bool__ в Python 3.x

Как указывалось в комментарии, вы бы лучше, чтобы определить __len__ на контейнер, как коллекции. Когда __len__ вернется 0, bool(x) будет оценивать False. В противном случае любое положительное число выше 1 будет равно True.

+3

Другой вариант заключается в реализации '__len__' (как контейнер); return '0' переведёт в' False' в логическом контексте, любое целое число над 1 будет 'True'. –

+0

@MartijnPieters Отредактировано для включения –

+0

@MartijnPieters благодарит за то, что вы указали решение __len__ по вышеуказанному вопросу. – darxtrix

1

См. the documentation on Truth Value Testing. Сначала он проверяет, имеет ли ваш экземпляр метод __nonzero__, если он не использует метод __len__. Экземпляр Ложные если __nonzero__ является Ложные или его длина равна 0.