1

假设我有一个类对外部世界表现为 int,但实际上是一个可变对象,在多个结构中具有固定位置。如果 n 是我的对象,我现在可以通过n.update(34)write 来更新它,但我发现我总是想改写n = 34。我浏览了http://docs.python.org/reference/datamodel.html,并没有看到任何类似 __assign__ 或 __value__ 的属性,它可以让我捕获=操作员并允许我更新我的对象而不是分配变量 n 的 int,将我的对象扔掉。更好的是,当一个 mutable 在 tuplet = (m, n)中时,我想用 更新我的 mutable t[1] = 34,但 Python 认为这是在尝试修改 immutable。

所以我想答案是,根据我能够理解的那份文件的一小部分,我正在尝试的不是 Pythonic。所以如果我不能按照我想要的方式去做,那么下一个最好的事情是什么?这样,如果有一天有人必须维护我的代码,它就不会过于冒犯。

4

1 回答 1

3

你的基础obj.value = newvalue基本上是最好的,最容易理解的方式。正如您所猜测的,在 Python 中无法覆盖赋值。

您可以__call__()在您的班级上实施以完成作业,这样您就可以做到obj(newvalue). 然而,对于普通读者来说,这根本不是一个重新分配。

另一个想法是实现__ilshift__()这样你就可以做到obj <<= newval。如果你足够用力地眯着眼睛,那至少看起来像是某种突变体重新分配操作。如果它不是数字类型,我可能会考虑它。但是<<具有明确定义的含义,int并且由于您伪装成该类型,因此恕我直言,以这种方式使用它会令人困惑。

于 2010-12-29T05:55:35.627 回答