Я пишу модуль, который преобразует несколько различных форматов файлов (например, vhdl в verilog, excel table в vhdl и т. Д.). Это не так сложно, но есть много специфического для языка форматирования. Мне просто пришло в голову, что элегантный способ сделать это состоял в том, чтобы иметь тип класса для каждого типа формата файла, имея класс, построенный на file.io. Класс наследует методы файла, а также возможность читать или писать определенный синтаксис для этого файла. Я не мог найти никаких примеров файла io суперкласс и как его написать. Моя идея состояла в том, что его экземпляр (открыть файл) я мог бы использовать:Как создать класс, основанный на файле.io
my_lib_file = Libfile(filename, 'w')
и написать простой параметр в libfile я мог бы использовать что-то вроде
my_lib_file.simple_parameter(param, value)
Такой класс должен связать вместе многие специфичные для файла функции, которые я сейчас использую аккуратно. На самом деле я бы предпочел, чтобы иметь возможность создать экземпляр класса как часть с заявлением например .:
with Libfile(filename, 'w') as my_lib_file:
for param, value in my_stuff.items():
my_lib_file.simple_parameter(param, value)
У вашего класса будет две обязанности, которые должны быть красным. –
На данный момент я сделал гибридное решение, которое всего 2 линии, так что это не так плохо, но моя оригинальная идея более аккуратная. @PeterWood, пожалуйста, объясните, почему вы думаете, что моя оригинальная идея приведет к тому, что у вас есть две обязанности? –
Его обязанности - форматировать вывод и вести себя как файл. –