Ir al contenido principal

Ralsina.Me — El sitio web de Roberto Alsina

Hard Python question

I am try­ing to do some­thing which is, I think, pret­ty cool, in python.

How­ev­er, I like show­ing things work­ing, and I am hav­ing trou­bles with the last fi­nal step on what I am try­ing to achieve.

Since I know a few bet­ter python pro­gram­mers read this...

Sup­pose I have this:

def fun(self,x):

class C:


What code should be in fun() so that it fig­ures out if it has been called as C.a or as C.b?

I am think­ing some­thing like read­ing the high­er step in a back­trace, but I don't know enough python to fig­ure out how to do that.

taj / 2006-04-03 06:57:

I don't think this is possible, as the "method" name you are using to call the function doesn't make it on to the call stack. You can get stack frames using sys._getframe, but I doubt the method name will appear in there (it's just a key/value pair in the class dict). If you really must get this kind of info you're better off doing something like:

def fun(self, callname): blah

C.a = lambda self: fun(self, 'a')

C.b = lambda self: fun(self, 'b')

but it really must be asked what you're trying to do :)

Roberto Alsina / 2006-04-03 06:58:

Blah, I only get a '?' as function name :-P

Roberto Alsina / 2006-04-03 06:58:

Looks like it *is* feasible!

Thanks taj for that _getframe , because googling for it just lead me here:

taj / 2006-04-03 06:59:

Have a look at my extremely simplistic interface to the DCOP command line app, it does something very similar:

Contents © 2000-2020 Roberto Alsina