[python] Statické metody v Pythonu

Roman Miklos RMiklos na pss.sk
Středa Listopad 8 13:03:33 CET 2006


Tvrdis to sice dost sebavedome, ale ja tomu nerozumiem, preco musi byt ta 
metoda v triede uhel prave staticka a preco nemoze byt dynamicka, ked ju v 
objekte zemepisny_uhel prekryvas? Coby sa stalo, keby bola dynamicka?
Naco je ta metoda staticka to je spolocna pre vsetky instancie triedy, ked 
ju ides potom prekryvat?

Cely tvoj priklad nefunguje a volanie self.static_str_na_radiany mi 
vyhadzuje chybu
static_str_na_radiany() takes exactly 1 argument (2 given)

Ako mozes pouzit pri tom volani self, ked je to referencia na konkretnu 
instanciu?

Aby som to demonstroval. prejdem k jednoduchsiemu prikladu, ktory tu bol 
uverejneny

class S(object):
    @staticmethod
    def staticM(pp):
        print pp*2

    def metod2(pp):
        self.staticM(pp);

si=S()
si.metod2("nazdar ")

tak toto mi vyhodi tu istu chybu
metod2() takes exactly 1 argument (2 given)

Takze cez self sa na takuto metodu odvolavat v tej istej triede nemozes!

Pouzitie statickej metody (t.j. metody triedy) by som videl v tom keby 
pracovala so statickymi premennymi (t.j. premennymi triedy), to je takymi 
premennymi, ktore su pre vsetky instancie danej triedy spolocne. 
Ale z tvojho vykladu to nevidim. Skus to prosim nejako vysvetlit, aj s 
funkcnym kodom.




superman <feed na centrum.cz> 
Sent by: python-bounces na py.cz
08.11.2006 12:17
Please respond to
Konference PyCZ <python na py.cz>


To
Konference PyCZ <python na py.cz>
cc

Subject
Re: [python] Statické metody v Pythonu






Omlouvám se, samozřejmě v té ukázce má být class uhel a class 
zemepisny_uhel namísto def, ale to jste asi pochopili.

Miloslav Ponkrác

> def uhel:
>    @staticmethod
>    def static_str_na_radiany(s):
>      # tato metoda umi konvertovat matematicky
>      # uhel zapsany ve stringu na radiany
>      return blablabla;
> 
>    def __add__(self, other):
>      if isinstance(other, basestring):
>        return uhel(self.__radians + self.static_str_na_radiany(other));
>      elseif:
>        # a tak dale
> 
> def zemepisny_uhel(uhel):
>    def static_str_na_radiany(s):
>      # tato metoda umi konvertovat zemepisny
>      # uhel zapsany ve stringu na radiany
>      # na rozdil od stejne metody v predkovi
>      # umi konvertovat i GPS souradnice
>      return blablabla;
> 
> zem_uhel = zemepisny_uhel(30.0)
> zem_uhel = zem_uhel + "30N54"

_______________________________________________
Python mailing list
Python na py.cz
http://www.py.cz/mailman/listinfo/python


Mgr. Ing. Roman MIKLÓ© 
Prvá stavebná sporiteµňa a.s. 
Bajkalská 30, P. O. Box 48 
829 48  Bratislava 25 
Tel.: +421/ 2 / 582 31 174 
Fax: +421/ 2 / 582 31 109 



Daląí informace o konferenci Python