По сути в ruby/python не нужны абстрактные классы. Во всяком случае так считали авторы языков, основываясь на идее, что в этих языках все проверки на существование методов происходят в рантайме, ну и можно в рантайме подменять методы и много чего еще творить с классами.
Может кто знает? И действительно ли хорош такой способ эмулировать абстрактный класс?
Обычно (хотя, возможно, и просто субъективное мнение и в таком подходе много плюсов) эмулировать фичу языка\фреймкорвка Х в языке\фреймворке Y, следуя против их конвенций - плохой вариант.
Программист на С++,PHP,C#,Java,Lisp,Smaltak,Python
Ruby это язык который является чистым ООП, по этому все объекты которые существуют в нем уже дефакто являются абстрактными т.к. в каждый объект в руби(а в руби ВСЕ есть объект) можно дополнить в рантайме, изменить поведение, уничтожить метод, переопределить, дополнить и все что душе угодно, Руби как и Smalltalk чистый ОО язык и по этому весь мир для них и объект и абстракция одновременно т.к. каждый объект можно дополнить, могут существовать пустые объекты которые заполняются позже(та же работа абстракции в C# "abstract class")