Найти - Пользователи
Полная версия: Помогите. Сложение экземляров класса.
Начало » Центр помощи » Помогите. Сложение экземляров класса.
1
dgryh
Мне необходимо реализовать метод __add__ сложения двух классов, который будет возвращать экземпляр класса ReadCSV.
     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__, который в последствии буду изменять, а потом возвращать.
Как создать ПУСТОЙ экземпляр класса, не вызывая при этом конструктора?

Метод _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")
ZerG
я просто не смог прочитать что вы выложили без тегов.
py.user.next
dgryh
[code python] 
тут пиши код
[/code]
А текст пиши просто - без всяких увеличений и выделений.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB