Есть ли смысл в использовании декоратора @abstractmethod в базовом классе, если использование raise NotImplementedError по сути и так делает этот метод абстрактным?
Хотя возможно, что это просто PyCharm слишком умный и на основании raise определяет этот метод абстрактным
Наличие декоратора @abstractmethod и метакласса abc.ABCMeta позволит свалиться на инстанцировании абстрактных классов, а не на вызове нереализованного метода.
В целом это можно использовать в библиотеках, чтобы пользователи не забывали реализовывать нужные методы.