
有人碰过类似的问题吗?
代码大致如下:
class A(): def __init__(self): self.foo = 'test' @property def foo(self): return self._foo @foo.setter def foo(self, foo): self._foo = foo class B(): def __init__(self): self.instance1 = A() self.instance2 = A() def test(self): self.instance1.foo = 'testChange' print(self.instance1.foo) print(self.instance2.foo) B().test() 以上代码输出是:
testChange test 而在实际代码中,仅仅修改一个实例属性,另一个实例属性同步被修改了,即出错输出是:
testChange testChange 折腾了我一天了,实在无奈
代码检查过,确认不是写错; git diff 过,确认修改没有问题;查看过两个实例的地址,确认过不同;怀疑过虚拟机问题,重启过,没用;怀疑过 pycache 问题,清空过,没用
然而坚信科学不信邪不信神的我,一通调试之后,发现,莫名其妙好了........................
相关环境:
1 CSM 2019 年 1 月 20 日 via Android 这种玄学问题我遇到过多次。开始几次在突然变好之后就没再调查了,以可能是某种不易复现的 bug、我眼花了、智子的干扰等理论搪塞过去了。直到上一次再次遇到,我决定主动出击,在结合了 shell 的历史记录、编辑器的撤销以及使劲的回想后终于发现,是我的代码写错了,后来莫名其妙好了是因为不知道什么时候改了代码。 所以我觉得你一定是写了两行那个赋值语句或者什么的没看清楚。 |
2 whoami9894 2019 年 1 月 20 日 via Android 解释器应该不会有这种 bug,猜测可能是一些没注意到的小失误比如两次打印都写成 instance1 了 |
3 Ccob OP @CSM 我一开始就是以为我写错了,所以最开始就排查是不是写错了,把能注释的全注释了,剩下的几乎就是贴出来那段了。但这过程毕竟也是改了代码,没存档,也没法回顾是不是当时检查看错了。。。 |
4 Ccob OP @whoami9894 最开始就是这么排查的。。。然后一天也没查出有写错的地方 T_T |
5 binaryify 2019 年 1 月 20 日 via iPhone 会不会是编辑器 bug,显示文件内容和实际文件内容不符 |