def __init__(self, filename: str): """Конструктор класса ReadCSV, построчно считывающий исходный файл @param filename: str, - путь до исходного CSV-файла @raises RuntimeError в случае проблем с чтением исходного файла @raises BufferError с выводом сообщения 'no rows in CSV' в случае, если исходный файл пуст Объект класса должен иметь 2 атрибута - _rows: list, - список считанных строк исходного файла - is_summable: bool, - индикатор суммируемости исходного файла == True, если исходный CSV-файл состоит из только 1-го столбца, причём содержит только целые числа == False, во всех остальных ситуациях В случае, если возникают проблемы с чтением исходного CSV-файла, требуется генерировать исключение RuntimeError В случае отсутствия строк в исходном файле, требуется генерировать исключение BufferError с сообщением 'no rows in CSV' ВАЖНО отметить, что в считываемых строках исходного CSV-файла требуется обрезать начальные и конечные пробельные символы """ self._rows = [] try: with open(filename, "r", encoding="utf-8") as file: for line in file: self._rows.append(line.strip(" \n")) if not self._rows: raise BufferError("no rows in CSW") except FileNotFoundError as err: raise RuntimeError(f"Ошибка это {err}") from err for line in self._rows: words = line.split(' ') if not (len(words) == 1 and words[0].isdigit()): self.is_summable = False break if line == self._rows[-1]: self.is_summable = True
Как создать ПУСТОЙ экземпляр класса, не вызывая при этом конструктора?
Метод _add__:
def __add__(self, other): """Оператор сложения 2-х суммируемых (значение True у атрибута is_summable) CSV-файлов @param other: ReadCSV, - объект класса ReadCSV (считанный CSV-файл) @return: ReadCSV, - объект класса ReadCSV, представляющий собой сумму 2-х CSV-файлов @raises ArithmeticError с текстом 'can't summarize non-summable files' в случае, если сложить 2 исходных CSV-файла корректно нельзя (хотя бы один из них не-суммируемый) Результатом сложения 2-х суммируемых CSV-файлов является объект класса ReadCSV, длина атрибута _rows которого равна наименьшей длине атрибута _rows у складываемых файлов, а значения на соответствующих позициях равны сумме значений на тех же позициях в исходных файлах, т.е. чтобы получить 2-ой элемент атрибута _rows результирующего объекта, требуется сложить 2-ой элемент атрибута _rows объектов self и other В случае, если один из файлов не является суммируемым, генерировать исключение ArithmeticError с текстом 'can't summarize non-summable files' """ if self.is_summable and other.is_summable: num = min(len(self), len(other)) mew_csv = ReadCSV(???) else: raise ArithmeticError("can't summarize non-summable files")