Join GitHub today
GitHub is home to over 28 million developers working together to host and review code, manage projects, and build software together.Sign up
Properties accessed twice for classes defined interactively #102
Original Launchpad bug 297501: https://bugs.launchpad.net/ipython/+bug/297501
Reported on the ipython-user list:
I am experiencing some unusual behavior only when I am directly
class MyClass(): def __init__(self): self._x = 3 def getx(self): print "getting x" return self._x def setx(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
[ 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.