Тому що у них різні випадки використання.
Цитуючи документи (Python 3.6):
Не впроваджений
повинні бути повернуті бінарними спеціальними методами (наприклад __eq__()
,
__lt__()
, __add__()
, __rsub__()
і т.д.) , щоб вказати , що операція не здійснюється стосовно іншого типу
виняток NotImplementedError
[...] У базових класах, визначених користувачем, абстрактні методи повинні підвищувати цей виняток, коли вони вимагають, щоб похідні класи переосмислили метод, або коли клас розробляється, щоб вказати, що реальну реалізацію ще потрібно додати.
Деталі див. За посиланнями.