Python Glossary English

все 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Сообщить о неточности