问题
I want to use autocomplete in ipython and jupyter for the following code with read-only class attributes (using @property
):
class A(object):
def __init__(self):
self.__value = 1
@property
def value(self):
return self.__value
class B(object):
def __init__(self):
self.a = A()
class C(object):
def __init__(self):
self.__a = A()
@property
def a(self):
return self.__a
b = B()
c = C()
Both
>>> b.a.value
and
>>> c.a.value
work well. But autocomplete for ipython and jupyter notebook works only for
>>> b.a.value
and
>>> c.a.
without tab-autocomplete.
How to rewrite the code to achieve c.a.<tab> -> c.a.value
autocomplete in ipython and jupyter notebook?
回答1:
Because of problems with IPython (6.x to 7.2) + jedi my temporary hack is
def fix_ipython_autocomplete(enable=True):
"""Change autocomplete behavior for IPython > 6.x
Parameter
---------
enable : bool (default True)
Is use the trick.
Notes
-----
Since IPython > 6.x the ``jedi`` package is using for autocomplete by default.
But in some cases, the autocomplete doesn't work correctly wrong (see e.g.
`here <https://github.com/ipython/ipython/issues/11653>`_).
To set the correct behaviour we should use in IPython environment::
%config Completer.use_jedi = False
or add to IPython config (``<HOME>\.ipython\profile_default\ipython_config.py``)::
c.Completer.use_jedi = False
"""
try:
__IPYTHON__
except NameError:
pass
else:
from IPython import __version__
major = int(__version__.split('.')[0])
if major >= 6:
from IPython import get_ipython
get_ipython().Completer.use_jedi = not enable
See also https://github.com/ipython/ipython/issues/11653
来源:https://stackoverflow.com/questions/54944533/autocomplete-for-jupyter-notebook-and-ipython-console-for-classes-with-propert