Python создать встроенный метод для класса

Я сделал класс, который может сделать некоторую дробную арифметику. Я меняю встроенный метод __add__, __sub__,__mul__,а также __div__ так что он может делать арифметику с дробями. Я могу использовать это с +, -, *, / символы. У меня вопрос, что я должен сделать, чтобы иметь возможность использовать __iadd__ как +=,

class Fraction:
    def __init__(self,num,den):
        self.num = num
        self.den = den
    def __str__(self):
        return str(self.num)+" / "+str(self.den)

    def __add__(self,other):
        num = self.num * other.den + other.num * self.den
        den = self.den * other.den
        common = self.gcf(num,den)
        return Fraction(num/common , den/common)

    def __iadd__(self,other):
        self.num = self.num * other.den + other.num * self.den
        self.den = self.den * other.den
        common = self.gcf(self.num,self.den)
        self.num = self.num/common
        self.den = self.den/common

1 ответ

Решение

Вам не хватает return self в конце вашего __iadd__ реализация. Расширенные методы присваивания могут возвращать разные экземпляры, поэтому return self является необходимым.

В несвязанном примечании вы можете уменьшить некоторое дублирование кода, реализовав добавление в терминах добавления на месте, например:

def __add__(self, other):
    clone = Fraction(self.num, self.den)
    clone += other
    return clone
Другие вопросы по тегам