[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