В Python невозможно полностью запретить переопределение методов, потому что наследование устроено так, что всегда выбирается тот метод, который находится ближе в цепочке наследования. 3 Поэтому вызов через self породит рекурсию, но родительский метод никогда не будет вызван. 3
Чтобы запретить переопределение метода, можно использовать метаклассы и писать код самостоятельно. 1