Christian Robottom Reis
kiko at async.com.br
Sun Jun 19 18:02:50 BRT 2005
On Sun, Jun 19, 2005 at 12:38:08AM -0700, David M. Cook wrote:
> I'd like to get this code working with a recent version of Python, but I
> don't understand the stuff about im_self, im_class, func2name, name2func,
> simple_import, etc. Can someone explain why this was neccessary?
You appear to have a number of different questions -- we can probably
explain why some things in IC are as they is, but you'll need to tell us
what you want to know :-)
Johan has merged today preliminary IC support for new-style classes; if
you'd like to try that out, it should (hopefully) work with a recent
version of python.
On the points I can surmise from your email:
- func2name and name2func are used because we pickle the signal
callback list with persisted objects. Because function objects
aren't picklable we need to store them as strings and do this
- im_self and im_class are normal Python properties of method objects:
>>> class Foo:
... def a(): pass
>>> f = Foo()
['__call__', '__class__', '__cmp__', '__delattr__', '__doc__',
'__get__', '__getattribute__', '__hash__', '__init__', '__new__',
'__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__str__',
'im_class', 'im_func', 'im_self']
They are used in func2name to allow access to the class and module
the function comes from.
- We use our own import hook --- simple_import actually calls
_myimport; the reason being that when we do a name2type we need to
do an import of the named module. Again this is done because we
can't pickle types (last I checked, too).
Christian Robottom Reis | http://async.com.br/~kiko/ | [+55 16] 3376 0125
More information about the IndexedCatalog