Edit detail for StatickeMetody revision 2 of 1

2
Editor: manduch
Time: 2010/07/22 15:29:30 GMT+2
Note:

changed:
-
Statické metody v Pythonu
===========================

Dotaz z konference
------------------
>>> Nevíte, jak udělat statickou metody v Pythonu, myslím metodu, 
>>> které není vázána k instanci, tedy self, ale jen ke třídě?


Odpověď 1
----------
s použitím dekorátoru::

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

více: http://www.ddj.com/184406073

Odpověď 2:
---------
bez dekoratoru, zastarale::

    class S(object):
        
        def staticM(pp):
            print pp*2
            
        staticM=staticmethod(staticM)
    
    S.staticM("nazdar ")

Odpoveď 3:
---------
Ak použijes staticmethod, nemáš prístup k triedovému objektu, ak potrebuješ robiť s triedou a jej "statickými" členmi, použi classmethod::

   class A(object):
    a = 3
    @staticmethod 
    def f():
        print(a)
    @classmethod
    def g(cls):
        print(cls.a)
        
    A.f() # vyhodi chybu, nepozna premennu a
    A.g() # vypíše hodnotu a, teda 3

Statické metody v Pythonu

Dotaz z konference

>>> Nevíte, jak udělat statickou metody v Pythonu, myslím metodu,
>>> které není vázána k instanci, tedy self, ale jen ke třídě?

Odpověď 1

s použitím dekorátoru:

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

S.staticM("nazdar ")

více: http://www.ddj.com/184406073

Odpověď 2:

bez dekoratoru, zastarale:

class S(object):

    def staticM(pp):
        print pp*2

    staticM=staticmethod(staticM)

S.staticM("nazdar ")

Odpoveď 3:

Ak použijes staticmethod, nemáš prístup k triedovému objektu, ak potrebuješ robiť s triedou a jej "statickými" členmi, použi classmethod:

class A(object):
 a = 3
 @staticmethod
 def f():
     print(a)
 @classmethod
 def g(cls):
     print(cls.a)

 A.f() # vyhodi chybu, nepozna premennu a
 A.g() # vypíše hodnotu a, teda 3