SORU
22 EYLÜL 2008, PAZARTESİ


Python sınıf farklılıkları yöntemi: ilişkili, ilişkisiz ve statik

Aşağıdaki sınıf yöntemleri arasındaki fark nedir?

Biri statik, diğeri değil?

class Test(object):
  def method_one(self):
    print "Called method_one"

  def method_two():
    print "Called method_two"

a_test = Test()
a_test.method_one()
a_test.method_two()

CEVAP
22 EYLÜL 2008, PAZARTESİ


Python arasında bir ayrım vardırbağlıveilişkisizyöntemleri.

Temel olarak, bir üyesi için bir çağrı (method_one) bağlı bir fonksiyon

a_test.method_one()

olduğu için tercüme

Test.method_one(a_test)

ilişkisiz bir yöntem yani bir ara. Bu nedenle, method_two sürümü çağrısı TypeError ile başarısız olur

>>> a_test = Test() 
>>> a_test.method_two()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: method_two() takes no arguments (1 given)

Bir yöntem bir dekoratör kullanarak bu davranışı değiştirebilirsiniz

class Test(object):
    def method_one(self):
        print "Called method_one"

    @staticmethod
    def method_two():
        print "Called method two"

Dekoratör yerleşik varsayılan type (sınıf sınıf, cf. metaclass söyler method_two bağlı yöntemlerinin oluşturmak için this question).

Şimdi, sınıfının bir örneği üzerinde iki veya statik yöntem doğrudan çalıştırabilirsiniz:

>>> a_test = Test()
>>> a_test.method_one()
Called method_one
>>> a_test.method_two()
Called method_two
>>> Test.method_two()
Called method_two

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • andyabc45

    andyabc45

    1 Mayıs 2011
  • jkimisyellow...ish

    jkimisyellow

    8 Temmuz 2009
  • wafflepwn

    wafflepwn

    14 AĞUSTOS 2008