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