Don Taylor wrote: > Is there a way to discover the original string form of the instance that > is represented by self in a method? > > For example, if I have: > > fred = C() > fred.meth(27) > > then I would like meth to be able to print something like: > > about to call meth(fred, 27) or > about to call fred.meth(27) > > instead of: > > about to call meth(<__main__.C instance at 0x00A9D238>, 27)
Not a direct answer to your question, but this may be what you want: If you give class C a __repr__ method you can avoid the default <class instance at address> string. >>> class C(object): def __init__(self, name): self.name = name def __repr__(self): return '%s(%r)' % (self.__class__.__name__, self.name) def meth(self, y): print 'about to call %r.meth(%r)' % (self, y) >>> fred = C('Fred') >>> fred.meth(27) about to call C('Fred').meth(27) >>> def meth2(x, y): print 'about to call meth2(%r, %r)' % (x, y) >>> meth2(fred, 42) about to call meth2(C('Fred'), 42) Of course, this doesn't tell you the name of the variable that points to the instance. For that (here's your direct answer), you will have to go to the source: >>> import inspect >>> import linecache >>> def f(a, b): print 'function call from parent scope:' caller = inspect.currentframe().f_back filename = caller.f_code.co_filename linecache.checkcache(filename) line = linecache.getline(filename, caller.f_lineno) print ' ' + line.strip() return a*b >>> fred = 4 >>> x = f(3, fred) function call from parent scope: x = f(3, fred) But defining __repr__ is far easier and more common. --Ben -- http://mail.python.org/mailman/listinfo/python-list