My code:
class Potato:
def __init__(self, r):
self.size = r
def __itruediv__(self, other):
self.size /= other
return Potato(self.size)
def __truediv__(self, other):
a = self.size
self.size -= self.size / other
return Potato(a / other)
def __str__(self):
return f"Potato({self.size})"
pt = pt1 = Potato(7)
pt /= 4
print(pt)
pt2 = pt / 3
print(pt, pt1, pt2, sep='\n')
Output:
Potato(1.75)
Potato(1.1666666666666665)
Potato(1.75)
Potato(0.5833333333333334)
Need Output:
Potato(1.75)
Potato(1.1666666666666665)
Potato(1.1666666666666665)
Potato(0.5833333333333334)
I don't know, why pt1 don't have same output as pt? and how to solve it. Please help
The in-place operators should normally return the object that was modified. The return value is assigned to the variable, so if it returns a new object the variable will be reassigned. Because of this, after
ptandpt1no longer refer to the samePotatoinstance.Conversely, the regular arithmetic operators should not normally modify their arguments, they should just return a new object. So
__truediv__()should not reassignself.size.