如何更改连接的类对象
我的代码:
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')
输出结果:
Potato(1.75)
Potato(1.1666666666666665)
Potato(1.75)
Potato(0.5833333333333334)
我想要的输出结果:
Potato(1.75)
Potato(1.1666666666666665)
Potato(1.1666666666666665)
Potato(0.5833333333333334)
我不明白,为什么pt1的输出和pt的输出不一样?我该怎么解决这个问题?请帮帮我。
1 个回答
-1
就一般来说,原地操作符应该返回被修改的对象。返回值会被赋值给一个变量,所以如果它返回了一个新对象,这个变量就会被重新赋值。因此,在执行完
pt /= 4
pt
和 pt1
就不再指向同一个 Potato
实例了。
相反,普通的算术操作符通常不应该修改它们的参数,它们应该只是返回一个新对象。所以 __truediv__()
不应该重新赋值给 self.size
。
class Potato:
def __init__(self, r):
self.size = r
def __itruediv__(self, other):
self.size /= other
return self
def __truediv__(self, other):
a = self.size / other
return Potato(a)
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')