[python] nazev metody

Petr Prikryl PrikrylP na skil.cz
Čtvrtek Leden 11 13:41:12 CET 2007


Radek Kanovsky
> mtip wrote:
> > potreboval bych zjistit nazev metody uvnitr tridy.
> > [...]
>     import sys
>     class a:
>         def aa(self):
>             print "ja jsem metoda:", sys._getframe(0).f_code.co_name
> 
>         bb = aa
>     x=a()
>     x.aa()
>     x.bb()
> 
> Neni to ale stoprocentne spolehlive, jak lze videt pri volani x.bb().

Aha, frame lze získat i takhle,... Paráda. 
Takže navrhuji kombinaci:

import sys

def MojeJmeno():
    '''Vraci jmeno volajiciho.'''
    return sys._getframe(1).f_code.co_name

class a:
    def aa(self):
        print 'Jsem metoda', MojeJmeno()

x = a()
x.aa()

S tím x.bb() je to asi pochopitelné a nic se s tím nedá dělat.
Stejně tak bych mohl definovat:

bb = x.aa
bb()

a taky to ukáže, že se volá metoda aa. Ta informace je tam
uložená z doby kompilace. bb je reference na objekt metody
a ta patří k třídě. Nesmí záležet na tom, jakým způsobem 
se k němu dostanu.

pepr


Další informace o konferenci Python