[python] Statické metody v Pythonu
Petr Prikryl
PrikrylP na skil.cz
Středa Listopad 8 12:34:46 CET 2006
superman
> pepr
> > Stejně je ale otázka, jestli opravdu chci používat
> > statické metody třídy. V podstatě jsou elegantní jen
> > v případě, kdy používají proměnné stejné třídy.
> > A zavádění proměnných třídy v Pythonu asi taky
> > není moc časté. [...]
>
> [...] Uvědomte si, že statická metoda patří do
> prostoru jmen třídy a její potomek jí může předefinovat.
> Jediným rozdílem je, že statická metoda nezná konkrétní
> instanci třídy. Takže klidně můžete udělat toto:
>
> class uhel:
> @staticmethod
> def static_str_na_radiany(s):
> return blablabla;
>
> def __add__(self, other):
> if isinstance(other, basestring):
> return uhel(self.__radians +\
> self.static_str_na_radiany(other));
> elseif:
> # a tak dale
>
> class 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;
> [...]
> Tohle je velmi blízké tomu co chci udělat a díky
> statické metodě vím, že metoda __add__ ve třídě
> uhel bude naprosto správně fungovat i pro potomky,
> [...]
Tohle použití vypadá velmi rozumně. Přidávám to
k tomu případu, kdy statické metody používají
statické proměnné. Shrnuto, jde tedy o případ,
kdy je statická metoda volána z metody objektu
stejné třídy a chci dosáhnout polymorfního chování.
Nikdy jsem to nepoužil a nechce se mi to zkoušet.
Bude ta metoda v potomkovi automaticky taky
statická?
pepr
Další informace o konferenci Python