Этот вопрос вызван ответами и обсуждениями этого вопроса . Следующий фрагмент кода показывает суть вопроса:
>>> bool(NotImplemented)
True
У меня есть следующие вопросы:
- Почему было решено, что
bool
значение NotImplemented
должно быть True
? Он чувствует себя не пифонически.
- Есть ли веская причина, о которой я не знаю? Документация, кажется, просто говорит, «потому что это так».
- Есть ли примеры, где это используется разумным образом?
Причины, по которым я считаю, что это не интуитивно понятно (пожалуйста, не обращайте внимания на отсутствие передового опыта):
>>> class A:
... def something(self):
... return NotImplemented
...
>>> a = A()
>>> a.something()
NotImplemented
>>> if a.something():
... print("this is unintuitive")
...
this is unintuitive
Кажется странным, что что-то с таким отрицательным значением (отсутствием реализации) будет считаться правдивым.
Соответствующий текст от:
NotImplemented
Специальное значение, которое должно возвращаться двоичными специальными методами (например, __eq__()
, __lt__()
, __add__()
, __rsub__()
и т. Д.), Чтобы указать, что операция не реализована относительно другого типа; могут быть возвращены двоичными специальными методами на месте (например, __imul__()
, __iand__()
и т. д.) для той же цели. Его истинное значение истинно.
- Из Документов Python
Редактировать 1
Чтобы прояснить мою позицию, я чувствую, что NotImplemented
способность оценивать как логическое значение само по себе является анти-паттерном. Я чувствую, что Исключение имеет больше смысла, но преобладает идея, что постоянный синглтон был выбран из соображений производительности при оценке сравнений между различными объектами. Полагаю, я ищу убедительные причины того, почему этот «путь» был выбран.