Original Launchpad bug 297501: https://bugs.launchpad.net/ipython/+bug/297501
Reported by: fdo.perez (Fernando Perez).
Reported on the ipython-user list:
I am experiencing some unusual behavior only when I am directly
working in the ipython shell. The problem involves the get method for
self._x = 3
print "getting x"
print "setting x"
self._x = x
x = property(getx, setx)
a = MyClass()
a.x # prints "getting x" twice
print a.x # prints "getting x" once
If you stick all this in a file and do 'run test.py', the problem does
not occur. Also, notice that it does not occur in the "print a.x"
[ LP comment 1 by: Fernando Perez, on 2008-11-13 06:47:47.661256+00:00 ]
This is indeed happening, and it's another manifestation of the problems with getattr that have also been reported here:
Similarly, the problem can be avoided by turning %autocall completely off. We still need to investigate whether we can fine-tune %autocall to still work while producing less spurious getattr calls.
Honestly, I don't think this is fixable while having autocall active. Autocall needs to inspect the objects fairly aggressively and I don't think we can make it work without triggering getattrs. The answer is simply: if your objects have so many side effects that you can't call getattr on them more than once, disable autocall altogether.