gpt4 book ai didi

在不可变对象(immutable对象)中修改可变对象的Pythonic方式

转载 作者:行者123 更新时间:2023-11-30 23:55:43 24 4
gpt4 key购买 nike

假设我有一个类,对于外界来说表现为 int,但实际上是一个可变对象,在多个结构中具有固定位置。如果 n 是我的对象,我现在可以通过编写 n.update(34) 来更新它,但我发现我总是想编写 n = 34 。我浏览过http://docs.python.org/reference/datamodel.html ,并且没有看到任何类似 __assign__ 或 __value__ 属性的东西,它们可以让我捕获 = 运算符并允许我更新我的对象,而不是将 int 分配给变量 n,从而丢弃我的对象。更好的是,当一个可变对象位于元组 t = (m, n) 中时,我想用 t[1] = 34 更新我的可变对象,但 Python 认为尝试修改不可变的。

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

最佳答案

您的基本obj.value = newvalue基本上是最好、最容易理解的方式。正如您猜测的那样,不可能覆盖 Python 中的赋值。

您可以实现__call__()在你的类(class)上做作业,这样你就可以做 obj(newvalue) 。然而,普通读者根本不清楚这是一次重新分配。

另一个想法是实现 __ilshift__()所以你可以做obj <<= newval 。如果你仔细观察的话,这至少看起来像是某种突变体重新分配操作。如果不是数字类型,我可能会考虑。但是<< int 有明确定义的含义而且,由于您伪装成该类型,恕我直言,以这种方式使用它会令人困惑。

关于在不可变对象(immutable对象)中修改可变对象的Pythonic方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4551790/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com