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