Во-первых, класс, содержащий абстрактный метод, сам является абстрактным и не должен инстанцироваться. Выбрасывая NotImplementedError вы такого эффекта не добьётесь и можете получить исключение в рантайме, создав по ошибке экземпляр абстрактного класса. Во-вторых, декларативный подход позволяет писать более чистый код, явно передающий намерения.