如何更改连接的类对象

0 投票
1 回答
35 浏览
提问于 2025-04-13 15:18

我的代码:

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

ptpt1 就不再指向同一个 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')

撰写回答