假设我有一个类作为外部世界的int,但事实上它是一个可变对象,在几个结构中有固定的位置。如果n是我的对象,我现在可以通过编写n.update(34)
来更新它,但我发现我总是想要编写n = 34
。我已经浏览了http://docs.python.org/reference/datamodel.html,并没有看到像__assign__或__value__这样的属性,它会让我陷阱=
运算符并允许我更新我的对象而不是为变量赋值呃,扔掉我的物体。更好的是,当一个mutable位于元组t = (m, n)
中时,我想用t[1] = 34
更新我的mutable,但是Python认为这是尝试修改不可变的。
所以我想答案是,基于我能够理解的那篇文章,我正在尝试的不是Pythonic。所以,如果我不能按照我想要的方式去做,那么下一个最好的事情是什么呢?如果某人有一天必须维护我的代码,那就不会过于冒犯。
答案 0 :(得分:3)
您的基本obj.value = newvalue
基本上是最好,最容易理解的方式。正如你猜测的那样,不可能在Python中覆盖赋值。
您可以在班级上实施__call__()
来执行作业,这样您就可以obj(newvalue)
。然而,对于不经意的读者来说,这是一个重新分配,这一点并不清楚。
另一个想法是实施__ilshift__()
,以便您可以obj <<= newval
。如果你足够眯眼,至少看起来像某种突变体重新分配操作。如果它不是数字类型,我可能会考虑它。但是<<
与int
有明确的含义,因为你伪装成那种类型,恕我直言,以这种方式使用它会让人感到困惑。