Re: [python] nazev metody
Všechno už bylo vymyšleno. Dokonce docela dávno, kdy se s tím člověk ještě nadřel... ;) http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/52315 pepr ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] nazev metody
> 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? ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] nazev metody
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 ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] nazev metody
mtip > potreboval bych zjistit nazev metody uvnitr tridy. > asi takhle: > class a: > def aa(self): > print "ja jsem metoda:", xxx > x=a() > x.aa() Možná by bylo dobré objasnit, proč to chceš vědět. Pokud je to například kvůli výpisu informace, kde se něco nepovedlo, pak může být lepší nastudovat si modul inspect: class a: def aa(self): import inspect frame = inspect.currentframe() info = inspect.getframeinfo(frame) print 'Jsem metoda', info[2] print 'Podrobnejsi info:', info x=a() x.aa() Dalo by se to vylepšit třeba takto: def JmenoMetody(): import inspect return inspect.stack()[1][3] class a: def aa(self): print 'Jsem metoda', JmenoMetody() x=a() x.aa() Upřímně řečeno, nenapadá mě, jak by funkce mohla jinak zjistit své jméno, aniž by se v zápisu to jméno objevilo. Ale možná to jde i jednodušeji. pepr ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] nazev metody
RK> On Thu, Jan 11, 2007 at 12:07:45PM +0100, mtip wrote: >> Zdravim, >> potreboval bych zjistit nazev metody uvnitr tridy. >> asi takhle: >> class a: >> def aa(self): >> print "ja jsem metoda:", xxx >> >> x=a() >> x.aa() RK> import sys RK> class a: RK> def aa(self): RK> print "ja jsem metoda:", RK> sys._getframe(0).f_code.co_name RK> bb = aa RK> x=a() RK> x.aa() RK> x.bb() RK> Neni to ale stoprocentne spolehlive, jak lze videt pri volani x.bb(). RK> Radek Kaňovský RK> ___ RK> Python mailing list RK> Python@py.cz RK> http://www.py.cz/mailman/listinfo/python --- Diky super, to je presne ono. -- Mirek N. ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] nazev metody
PV> class C: PV> def m1(self): PV> print self.m1.__name__ Jenze ja to m1 v self.m1.__name__ prave neznam a potrebuju ho zjistit. -- Mirek N. ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] nazev metody
On Thu, Jan 11, 2007 at 12:07:45PM +0100, mtip wrote: > Zdravim, > potreboval bych zjistit nazev metody uvnitr tridy. > asi takhle: > class a: > def aa(self): > print "ja jsem metoda:", xxx > > x=a() > x.aa() 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(). Radek Kaňovský ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] nazev metody
mtip wrote: > Zdravim, hello, > potreboval bych zjistit nazev metody uvnitr tridy. > asi takhle: > class a: > def aa(self): > print "ja jsem metoda:", xxx > > x=a() > x.aa() Asi takto: ~~ CODE ~~` In [1]: import sys In [2]: def ahoj_ja_som_fcia(): ...: print "ja som:", sys._getframe().f_code.co_name ...: In [10]: ahoj_ja_som_fcia() ja som: ahoj_ja_som_fcia ~~ /CODE ~~` vie niekto, ci sa da zistit nejako aj ku ktoremu objektu metoda patri ? lebo tymto sposobom sa nedostanem ku objektu instancemethod, ale ku objektu code. A tam sa uz samozrejme ku im_self nedostanem :( > > diky za pomoc. > ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] nazev metody
On Thursday 11 January 2007 12:07, mtip wrote: > Zdravim, > potreboval bych zjistit nazev metody uvnitr tridy. > asi takhle: > class a: > def aa(self): > print "ja jsem metoda:", xxx > > x=a() > x.aa() class C: def m1(self): print self.m1.__name__ > diky za pomoc. neni zac, mam rad pivo a kocici jazycky. p. pgpO9ZFzvJbGP.pgp Description: PGP signature ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python