Я не буду сейчас про конкретный пример говорить, и скажу в общем
одну и туже функцию, но с небольшим отличием
универсальное решение - метапрограммирование
Это часто считается говнокодингом, в других языках типа c++ или c# есть препроцессор, простой язык шаблонизатор, игнорирующий частично или полностью синтаксические особенности базового языка
Код функции разбивается на части, подобные в разных экземплярах этих функций, а различия вносятся через параметры функций препроцессора.
В данном случае различия в имени класса, в прокси-вызове super и строки определяющей published_on, соответственно все остальное в функции можно определить в макросе препроцессора и сгенерировать код нужное количество раз, вызвав этот макрос.
Лично я когда мне нужно в метапрограммирование, (использую не смейтесь php) добавив вызов своей утилиты в сборку , но ничто не мешает взять готовое, первый же гуглеж выдает filepp или gpp (сишный синтаксис макросов)
недостатки подхода - исходные файлы до макро могут не поддерживаться IDE и редакторами, сломанный контроль синтаксиса и сложнопонятные сообщения об ошибках могут отпугнуть