2017-01-25 6 views

ответ

1

Как вы можете видеть из the source code, то PriorityQueue класс не реализует __len__ или __bool__, и по умолчанию является то, что если объект присутствует это truthy:

Если класс не определяет ни __len__() ни __bool__(), все его экземпляры считаются верными.

+1

Следующий вопрос: «Почему они реализовали функцию qsize() вместо __len __()?» Не зная ничего, кроме комментариев в источнике, кажется, что из-за многопоточности и условий гонки qsize() возвращает только приблизительный размер, поэтому они, вероятно, не хотели использовать магический метод с неожиданными результатами. Спасибо, Джон. – BeardedOne85

+1

@ BeardedOne85 да, это так; реализация '__len__' подразумевает, что они действительно знают, что это такое! – jonrsharpe

+0

@ BeardedOne85 Теперь они просто должны быть согласованными и документировать 'empty()' as "Return True, если очередь примерно пуста." :-) –