28 ŞUBAT 2009, CUMARTESİ
Neden @foo yapar.pasör Python benim için çalışmıyorsun?
Yani, Python dekoratörler ile oynuyorum 2.6, ve bazı sorunlar onları çalışmak için yaşıyorum. İşte benim sınıf dosyası:
class testDec:
@property
def x(self):
print 'called getter'
return self._x
@x.setter
def x(self, value):
print 'called setter'
self._x = value
Bu sandım ne gibi bir özelliği x
tedavi etmek için, ama bu işlevleri çağırmak ve ayarlanır. Bu yüzden, BOŞ kovdum ve kontrol:
>>> from testDec import testDec
from testDec import testDec
>>> t = testDec()
t = testDec()
>>> t.x
t.x
called getter
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "testDec.py", line 18, in x
return self._x
AttributeError: testDec instance has no attribute '_x'
>>> t.x = 5
t.x = 5
>>> t.x
t.x
5
Açıkçası İlk Çağrı alıcı diyorum bu yana beklendiği gibi çalışır ve varsayılan değeri yoktur ve başarısız. TAMAM, iyi, anlıyorum. Ancak, t.x = 5
otomatik arama x
ve şimdi alıcı çalışmıyor yeni bir özellik oluşturmak gibi görünüyor!
Neyi kaçırıyorum?
CEVAP
28 ŞUBAT 2009, CUMARTESİ
classic old-style classes kullanmaya başladın. properties doğru çalışması için new-style classes (inherit from object
) yerine kullanmak gerekir. Sadece MyClass(object)
olarak ilan sınıfı:
class testDec(object):
@property
def x(self):
print 'called getter'
return self._x
@x.setter
def x(self, value):
print 'called setter'
self._x = value
Çalışır:
>>> k = testDec()
>>> k.x
called getter
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/devel/class_test.py", line 6, in x
return self._x
AttributeError: 'testDec' object has no attribute '_x'
>>> k.x = 5
called setter
>>> k.x
called getter
5
>>>
Bunu Paylaş:
** (Çift yıldız) ve * (yıldız) Python ...
Neden't Python fonksiyonel progra...
Python dosya uzantılarını şeyi yapar ....
Neden Python 3&; 00" harf için 0 ...
Neden boş bir liste için atama yapar (...