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ş:
Python statik sınıf değişkenleri...
Bir örnek yöntemi Python bir dekoratör...
Java iç sınıf ve statik iç içe sınıf...
Statik sınıf ve singleton deseni arası...
'Eclipse içine bir proje aldıktan...