[IPython-dev] ipipe news

John Hunter jdhunter at ace.bsd.uchicago.edu
Thu Mar 2 13:59:21 EST 2006

>>>>> "Walter" == Walter Dörwald <walter at livinglogic.de> writes:
    >> This morning I was thinking about the usefulness of an object
    >> browser class "iobj", that does a dir on an object and reports
    >> the attribute names in the first class and the attribute values
    >> in the right.  Something like myobj | ifilter("not
    >> attr.startswith('_')") | ibrowse

    Walter> You should be able to do: myobj.__dict__ | ifilter("not
    Walter> key.startswith('_')") | ibrowse

    Walter> Unfortunately this is currently broken, but I sent a patch
    Walter> to Ville a few minutes ago that fixes this problem.

Yep, that patch was in response to me playing with o.__dict__|ibrowse,
I think.

I was looking for something a bit broader than __dict__ though, namely
something that uses dir(obj) combined with getattr.

The motivation is that matplotlib has an object introspection
mechanism by doing a dir on objects and looking for names that have
set_something or get_something, where something is a property (we
basically have our own hacked up version of python properties).  A
custom ifilter could be written to browse these properties, by
filtering on callable attrs that start with 'set_'

Here's a little example of using setp, the object inspector, in
pylab.  I was hoping to hack up a ipipe version...

In [4]: line, = plot(rand(10))

In [5]: [a for a in dir(line) if a.startswith('set_') and callable(getattr(line, a))]
['set_aa', 'set_alpha', 'set_animated', 'set_antialiased', 'set_c',
 'set_clip_box', 'set_clip_on', 'set_color', 'set_dash_capstyle',
 'set_dash_joinstyle', 'set_dashes', 'set_data', 'set_figure',
 'set_label', 'set_linestyle', 'set_linewidth', 'set_lod', 'set_ls',
 'set_lw', 'set_marker', 'set_markeredgecolor', 'set_markeredgewidth',
 'set_markerfacecolor', 'set_markersize', 'set_mec', 'set_mew',
 'set_mfc', 'set_ms', 'set_solid_capstyle', 'set_solid_joinstyle',
 'set_transform', 'set_visible', 'set_xdata', 'set_ydata',

In [6]: setp(line)
    alpha: float
    animated: [True | False]
    antialiased or aa: [True | False]
    clip_box: a matplotlib.transform.Bbox instance
    clip_on: [True | False]
    color or c: any matplotlib color - see help(colors)
    dash_capstyle: ['butt' | 'round' | 'projecting']
    dash_joinstyle: ['miter' | 'round' | 'bevel']
    dashes: sequence of on/off ink in points
    data: (array xdata, array ydata)
    figure: a matplotlib.figure.Figure instance
    label: any string
    linestyle or ls: [ '-' | '--' | '-.' | ':' | 'steps' | 'None' ]
    linewidth or lw: float value in points
    lod: [True | False]
    marker: [ '+' | ',' | '.' | '1' | '2' | '3' | '4' | '<' | '>' |
    'D' | 'H' | '^' | '_' | 'd' | 'h' | 'o' | 'p' | 's' | 'v' | 'x' |
    '|' ]
    markeredgecolor or mec: any matplotlib color - see help(colors)
    markeredgewidth or mew: float value in points
    markerfacecolor or mfc: any matplotlib color - see help(colors)
    markersize or ms: float
    solid_capstyle: ['butt' | 'round' |  'projecting']
    solid_joinstyle: ['miter' | 'round' | 'bevel']
    transform: a matplotlib.transform transformation instance
    visible: [True | False]
    xdata: array
    ydata: array
    zorder: any number

More information about the IPython-dev mailing list