все Python 3Встроенные типыпонятие
NotImplemented
особые значения
Особое значение, которое возвращает метод сравнения или арифметики, чтобы сказать «с этим типом не умею» и дать Python попробовать отражённую операцию.
Синтаксис
def __eq__(self, other):
if not isinstance(other, Point):
return NotImplemented
Возвращать нужно именно NotImplemented, а не поднимать NotImplementedError: значение даёт интерпретатору попробовать метод другого операнда и только потом поднять TypeError. С Python 3.14 bool(NotImplemented) поднимает TypeError — раньше значение считалось истинным, и проверка if result: молча пропускала ошибку. Это единственный экземпляр типа NotImplementedType, сравнивают его через is.
Примеры
class Money:
def __init__(self, amount):
self.amount = amount
def __eq__(self, other):
if not isinstance(other, Money):
return NotImplemented
return self.amount == other.amount
print(Money(5) == Money(5)) # → True
print(Money(5) == 5) # → False: Python попробовал int.__eq__ и сравнил по тождеству
print(type(NotImplemented).__name__) # → NotImplementedType
# Python 3.14+
bool(NotImplemented) # → TypeError: с Python 3.14 в логическом контексте нельзя
См. также
Частые ошибки
Открыть в полном глоссарииdocs.python.orgСообщить о неточности