[python] Classmethod

Jan Janech devel na atlas.sk
Čtvrtek Listopad 9 15:14:43 CET 2006


superman wrote:
> Mnohokrát děkuji
> 
> Chápu to tedy správně, že:
> 
> 1) Normální metoda dostane jako první parametr instanci třídy.
> 
> 2) Classmethod dostane jako první parametr pouze třídu, tedy snad pouze 
> nějaký odkaz na něco souvisejícího s názvem třídy.

Ako prvy parameter dostanes triedu.Je to vhodne koli dedicnosti. Napr.

~~~~~~~~~~~~~~~ <IPYTHON SHELL> ~~~~~~~~~~~~~~~~~~~~
In [1]: class Trieda1:
   ...:     @classmethod
   ...:     def akoze_konstruktor(cls):
   ...:         print "Konstruujem triedu '%s'"%cls.__name__
   ...:         return cls()
   ...:
   ...:

In [2]: class Trieda2(Trieda1):
   ...:     pass
   ...:

In [3]: Trieda1.akoze_konstruktor()
Konstruujem triedu 'Trieda1'
Out[3]: <__main__.Trieda1 instance at 0xb78a72ec>

In [4]: Trieda2.akoze_konstruktor()
Konstruujem triedu 'Trieda2'
Out[4]: <__main__.Trieda2 instance at 0xb789ebac>
~~~~~~~~~~~~~~~ </IPYTHON SHELL> ~~~~~~~~~~~~~~~~~~~

okrem toho prebera aj vlastnost statickej metody, ze ju mozete zavolat
aj na triede, aj na instancii triedy a dosiahnete to iste. Teda
Trieda1.akoze_konstruktor() a Trieda1().akoze_konstruktor() vykonaju
totoznu akciu

> 
> 3) Statická metoda nedostane jako první parametr nic (tedy kromě toho co 
> si explicitně zvolím jako paramtry).
>
> Miloslav Ponkrác



Další informace o konferenci Python