SORU
9 NİSAN 2009, PERŞEMBE


Python statik yöntemler?

Bir sınıf başlatılıyor olmadan onları aramak gibi de: Python statik yöntemler olması mümkündür

ClassName.StaticMethod ( )

CEVAP
9 NİSAN 2009, PERŞEMBE


Evet, staticmethod dekoratör kullanarak

class MyClass(object):
    @staticmethod
    def the_static_method(x):
        print x

MyClass.the_static_method(2) # outputs 2

Bazı kod statik bir yöntem tanımlama eski yöntem, bir işlevi yerine dekoratör olarak staticmethod kullanarak kullanıyor olabilir. Bu sadece Python (2.2 ve 2.3) eski sürümleri desteklemek için varsa kullanılmalıdır

class MyClass(object):
    def the_static_method(x):
        print x
    the_static_method = staticmethod(the_static_method)

MyClass.the_static_method(2) # outputs 2

Bu ilk örnek (@staticmethod) kullanarak tamamen aynı, sadece güzel dekoratör sözdizimini kullanarak

Son olarak, staticmethod idareli kullanın! Statik yöntemler Python gereklidir, ve ayrı bir "üst düzey" işlevi daha net olurdu. birçok kez onları görüyorum çok nadir durumlar vardır


The following is verbatim from the documentation::

Statik bir yöntem örtülü ilk bağımsız değişken almaz. Statik bir yöntem bildirmek için bu deyimi kullanın:

class C:
    @staticmethod
    def f(arg1, arg2, ...): ...

@Staticmethod biçim, işlevi bir dekoratör – ayrıntılar için Function definitions fonksiyon tanımları açıklamasına bakın.

Ya bir örneği (C().f()) sınıfı (C.f()) veya çağrılabilir. Örneği kendi sınıfının dışında göz ardı edilir.

Python statik yöntemler bu Java veya C bulunan benzerdir . Daha gelişmiş bir kavram için bkz: classmethod().

Statik yöntemler hakkında daha fazla bilgi için The standard type hierarchy standart tip hiyerarşi belgelerine bakın.

Sürüm 2.2 yeni.

Sürüm 2.4 değişti: İşlev dekoratör sözdizimi ekledi.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • L33TNoonProductions

    L33TNoonProd

    24 EYLÜL 2010
  • theavettbrothers

    theavettbrot

    9 ŞUBAT 2007
  • WhtButterflyLiz

    WhtButterfly

    14 NİSAN 2008