I would like to have autocompletion in IPython (Jupyter qtconsole or console) for the following case:
I create a class
class MyClass(object):
def __init__(self, a, b):
self.a = a
self.b = b
and put several objects of this class into a list or dict
my_list = []
my_list.append(MyClass(2,3))
my_list.append(MyClass(9,2))
my_list.append(MyClass(8,4))
Now if I do
my_list[0].TAB
autocompletion is not working.
I would like to see a list of my class attributes and methods. Am I missing something or is this just not support in IPython?
Appreciate your help ...
The IPython Code Autocompletion feature (and other Magics) helps developers implement the code logic and navigate through the libraries/APIs in the same experience as the traditional IDEs. There is some new development project that tries to merge the benefits/features of the traditional IDEs and Jupyter Notebook like Netflix's Polynote.
You can also customise key completions for your objects, e.g. pressing tab after obj ["a. To do so, define a method _ipython_key_completions_ (), which returns a list of objects which are possible keys in a subscript expression obj [key]. IPython can display richer representations of objects.
Custom (ie. not built-in) objects in Python by default have a magic __dict__ attribute that holds all per-instance attributes of the object. But there’s no reason why we can’t supply our own dict instead!
To do so, define a method _ipython_key_completions_ (), which returns a list of objects which are possible keys in a subscript expression obj [key]. IPython can display richer representations of objects.
You can execute that in a cell of your Jupyter Notebook:
%config IPCompleter.greedy=True
Which gives (in an ipython/jupyter console, but same in a notebook)
In [10]: my_list[0].<TAB>
my_list[0].a my_list[0].b
To have it permanently, just edit your file ipython_config.py
so it looks like this (Commented lines are already present and unmodified, around lines 506-514):
#------------------------------------------------------------------------------
# Completer configuration
#------------------------------------------------------------------------------
# Activate greedy completion
#
# This will enable completion on elements of lists, results of function calls,
# etc., but can be unsafe because the code is actually evaluated on TAB.
c.Completer.greedy = True # <-- uncomment this line and set it to True
If you don't have ipython_config.py
in ~/.ipython/profile_default/
you can create one with:
ipython profile create
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With