[python] nazev metody
Jan Janech
devel na atlas.sk
Čtvrtek Leden 11 14:04:39 CET 2007
> 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
este pri jednej veci to zblbne... ono takto zistim nazov skompilovaneho
bloku kodu... nie nazov fcie...
~~~~~~~~~~~~~~~~~~~~~ CODE ~~~~~~~~~~~~~~~~~~~~~
In [1]: import sys
In [2]: import types
In [3]: class a:
...: def aa(self):
...: print "ja jsem metoda:", sys._getframe(0).f_code.co_name
...: bb = aa
...: cc = types.FunctionType(aa.func_code, aa.func_globals, 'cc')
...:
In [4]: a.aa.__name__
Out[4]: 'aa'
In [5]: a.bb.__name__ # bb je len referencia na aa
Out[5]: 'aa'
In [6]: a.cc.__name__ # tu je spravne 'cc'
Out[6]: 'cc'
In [7]: a().aa()
ja jsem metoda: aa
In [8]: a().bb()
ja jsem metoda: aa
In [9]: a().cc() # a hups tu je 'aa'
ja jsem metoda: aa
~~~~~~~~~~~~~~~~~~~~~ /CODE ~~~~~~~~~~~~~~~~~~~~~
Neviem kto by nieco taketo pouzival, ale je mozne ze to vyuzivaju
niektore frameworky.
Da sa nejako dostat ku instancemethod objektu, nemiesto code objektu?
Další informace o konferenci Python