spyder-ide / spyder

Official repository for Spyder - The Scientific Python Development Environment
https://www.spyder-ide.org
MIT License
8.22k stars 1.59k forks source link

print function in __getattribute__ method prints forever. #13639

Open crux26 opened 4 years ago

crux26 commented 4 years ago

Issue Report Checklist

Problem Description

When print function is used in __getattribute__ method with Spyder, it prints endlessly in IPython console of Spyder. Tested the same code with Jupyter notebook and IPython (directly run with Anaconda Prompt with ipython command), but they do not have this problem.

What steps reproduce the problem?

Running below prints "Get: __class__" tens of times.

class myClass:      def __getattribute__(self, attr):          print('Get: %s' % attr) X = myClass() # Get: __class__ is printed tens of times after running this line X.name # Get: name printed here

What is the expected output? What do you see instead?

It should print "Get: name" only once and nothing else (and it does in Jupyter Notebook and IPython, which is directly run through Anaconda Prompt). However, in Spyder IPython console, it prints "Get: name" first for once, and prints "Get: __class__" tens of times.

I can run something else after print function is called several tens of times. But after returning me that result, it again prints above string tens of times.

Versions

Dependencies


# Mandatory:
atomicwrites >=1.2.0           :  1.4.0 (OK)
chardet >=2.0.0                :  3.0.4 (OK)
cloudpickle >=0.5.0            :  1.5.0 (OK)
diff_match_patch >=20181111    :  20200713 (OK)
intervaltree                   :  None (OK)
IPython >=4.0                  :  7.16.1 (OK)
jedi =0.17.1                   :  0.17.1 (OK)
nbconvert >=4.0                :  5.6.1 (OK)
numpydoc >=0.6.0               :  1.1.0 (OK)
paramiko >=2.4.0               :  2.7.1 (OK)
parso =0.7.0                   :  0.7.0 (OK)
pexpect >=4.4.0                :  4.8.0 (OK)
pickleshare >=0.4              :  0.7.5 (OK)
psutil >=5.3                   :  5.7.0 (OK)
pygments >=2.0                 :  2.6.1 (OK)
pylint >=1.0                   :  2.5.3 (OK)
pyls >=0.34.0;<1.0.0           :  0.34.1 (OK)
qdarkstyle >=2.8               :  2.8.1 (OK)
qtawesome >=0.5.7              :  0.7.2 (OK)
qtconsole >=4.6.0              :  4.7.5 (OK)
qtpy >=1.5.0                   :  1.9.0 (OK)
rtree >=0.8.3                  :  0.9.4 (OK)
sphinx >=0.6.6                 :  3.1.2 (OK)
spyder_kernels >=1.9.2;<1.10.0 :  1.9.2 (OK)
watchdog                       :  None (OK)
zmq >=17                       :  19.0.1 (OK)

# Optional:
cython >=0.21                  :  0.29.21 (OK)
matplotlib >=2.0.0             :  3.2.2 (OK)
numpy >=1.7                    :  1.18.5 (OK)
pandas >=0.13.1                :  1.0.5 (OK)
scipy >=0.17.0                 :  1.5.0 (OK)
sympy >=0.7.3                  :  1.6.1 (OK)
andfoy commented 4 years ago

@crux26, thanks for reporting this issue, I was able to reproduce it also. @dalthviz, do you know if the variable explorer calls __getattr__ many times?

dalthviz commented 4 years ago

@andfoy maybe this is caused for the object explorer? I think that we recursively get the attributes of the objects there