[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