Search code examples
ipythonjupyter-notebookjupyterqtconsole

Ipython autocompletion for list or dict of objects


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 ...


Solution

  • 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