Vì vậy, tôi đang chơi với các nhà trang trí trong Python 2.6 và tôi gặp một số khó khăn khi khiến chúng hoạt động. Đây là tập tin lớp của tôi:
class testDec:
@property
def x(self):
print 'called getter'
return self._x
@x.setter
def x(self, value):
print 'called setter'
self._x = value
Những gì tôi nghĩ điều này có nghĩa là đối xử x
như một tài sản, nhưng gọi các hàm này trên get và set. Vì vậy, tôi đã kích hoạt IDLE và kiểm tra nó:
>>> 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
Rõ ràng cuộc gọi đầu tiên hoạt động như mong đợi, vì tôi gọi getter, và không có giá trị mặc định, và nó thất bại. OK, tốt, tôi hiểu. Tuy nhiên, lệnh gọi để gán t.x = 5
dường như tạo ra một thuộc tính mới x
và bây giờ getter không hoạt động!
Tôi đang thiếu gì?