Парсер в данном случае просто интерфейс. Поскольку Python - язык с динамической типизацией, то наследование или обертки не требуются вовсе. Просто все конкретные парсеры должны реализовать подразумеваемый интерфейс:
class CsvParser:
def parse(self, file_name):
class XlsParser:
def parse(self, file_name);
Экземпляры конкретных парсеров, по мере их появления складываем в обычный словарь, где ключ - это расширение файла, под которое заточен парсер.
{ 'csv': CsvParser(), 'xls': XlsParser(), 'xml': XmlParser() }
В конечном итоге можно реализовать поставщик парсеров, который будет выбирать подходящий парсер из вышеозначенного словаря, используя расширение имени файла:
class ParserProvider:
def provide(file_name):