有人碰过类似的问题吗?
代码大致如下:
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-01-20 13:24:34 +08:00 via Android
这种玄学问题我遇到过多次。开始几次在突然变好之后就没再调查了,以可能是某种不易复现的 bug、我眼花了、智子的干扰等理论搪塞过去了。直到上一次再次遇到,我决定主动出击,在结合了 shell 的历史记录、编辑器的撤销以及使劲的回想后终于发现,是我的代码写错了,后来莫名其妙好了是因为不知道什么时候改了代码。
所以我觉得你一定是写了两行那个赋值语句或者什么的没看清楚。 |
2
whoami9894 2019-01-20 13:28:02 +08:00 via Android
解释器应该不会有这种 bug,猜测可能是一些没注意到的小失误比如两次打印都写成 instance1 了
|
3
Ccob OP @CSM 我一开始就是以为我写错了,所以最开始就排查是不是写错了,把能注释的全注释了,剩下的几乎就是贴出来那段了。但这过程毕竟也是改了代码,没存档,也没法回顾是不是当时检查看错了。。。
|
4
Ccob OP @whoami9894 最开始就是这么排查的。。。然后一天也没查出有写错的地方 T_T
|
5
binaryify 2019-01-20 14:03:27 +08:00 via iPhone
会不会是编辑器 bug,显示文件内容和实际文件内容不符
|