Уведомления

Группа в Telegram: @pythonsu

#1 Июль 2, 2022 21:52:43

dgryh
Зарегистрирован: 2022-07-02
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите. Сложение экземляров класса.

Мне необходимо реализовать метод __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")

Отредактировано dgryh (Июль 3, 2022 13:25:29)

Офлайн

#2 Июль 2, 2022 21:55:14

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

Помогите. Сложение экземляров класса.

я просто не смог прочитать что вы выложили без тегов.



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#3 Июль 3, 2022 01:16:25

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10003
Репутация: +  857  -
Профиль   Отправить e-mail  

Помогите. Сложение экземляров класса.

dgryh

[code python] 
тут пиши код
[/code]
А текст пиши просто - без всяких увеличений и выделений.



Отредактировано py.user.next (Июль 3, 2022 01:16:34)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version