ok, diky za vycerpavajuci popis, ale napriek tomu si myslim, ze tam kludne mozes pouzit metodu dynamicku, fungovat to bude dobre a mas po problemoch :-)
superman <[EMAIL PROTECTED]> Sent by: [EMAIL PROTECTED] 08.11.2006 13:22 Please respond to Konference PyCZ <[email protected]> To Konference PyCZ <[email protected]> cc Subject Re: [python] Statické metody v Pythonu > 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? Nestane se vůbec nic, když ta metoda bude dynamická, jenom prostě dostane jeden parametr navíc, tedy self, který se k ničemu nepoužije a zahodí se. > Cely tvoj priklad nefunguje a volanie self.static_str_na_radiany mi > vyhadzuje chybu > static_str_na_radiany() takes exactly 1 argument (2 given) Pokud to volám uvnitř třídy se self, tak to funguje. Python pochopí, že namísto self chci vlastně použít jméno třídy. Když nad tím tak přemýšlím, jestli je to vůbec korektní, jestli by se nemělo spíš použít něco ve stylu self.__name__.metoda (samozřejmě tento zápis je blbost, ale já to neovládám, takže to berte spíš jako "vyjádření algoritmu"). Mimo třídu už to Python nepochopí a snaží se self předat jako argument. Představuji si to tak, že při definici třídy Python projde metody a získá informaci, že statická metoda nechce parametr self a tak volání self.metoda převede na trida.metoda. Mimo definici třídy se Python chová dost hloupě a prostě chce otrocky self předávat jako parametr aniž by tušil, že to je blbost. Takhle můžou vzniknout i dost ošklivé chyby ve stylu: class t: @staticmethod def secti_tri_inty(a = 0, b = 0 ,c = 0): return a * b * c; instance = t() instance.secti_tri_inty(1,2) Tohle asi udělá něco jiného, než bylo zamýšleno a to se hodně špatně hledá. Osobně bych si přál, aby Python byl opraven, aby i statické metody fungovaly správně mimo definici třídy. Ve všech jazycích to tak funguje. > 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. Statická metoda je prostě metoda, která jen nezná instanci třídy! Nic víc a nic méně. Zbylé použití už nechte na fantazii programátora a neomezujte ho (teď jsem trochu moc drzý, promiňte mi mou smělost) :-))). Pokud prostě je potřeba polymorfismus, u kterého není potřeba znát instanci třídy, je to přesně případ pro statickou metodu. Jestli statická metoda bude pracovat nad globálními, nebo statickými proměnnými, případně nad žádnými proměnnými je už jedno. Druhé možné použití je, pokud nepotřebuji pracovat s instančními proměnnými a chci z nějakého důvodu mít metodu v prostoru jmen třídy. Případ funkčnho kódu poslat mohu, prostě se mi jedná o třídu pracující s úhlem, která definuje matematické operace nad úhlem i další základní operace plus konverze úhlu do a ze stringu, čísla a objektu. Nad tím mám potomky pracující se zeměpisnou šířkou a délkou a s astronomickými úhly. Zatím je to under construction. :-))) Miloslav Ponkrác > _______________________________________________ Python mailing list [email protected] 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 _______________________________________________ Python mailing list [email protected] http://www.py.cz/mailman/listinfo/python
