Vì vậy, tôi đang chơi với trang trí trong Python 2.6, và tôi đang gặp một số vấn đề khiến chúng hoạt động. Dưới đây là tập tin lớp học của tôi:Tại sao @ foo.setter trong Python không hoạt động đối với 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ều trị x
như một tài sản, nhưng gọi các chức năng trên get và thiết lập. Vì vậy, tôi đã kích hoạt IDLE và đã kiểm tra IDLE:
>>> 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 là getter, không có giá trị mặc định và không thành công. OK, tốt, tôi hiểu. Tuy nhiên, các cuộc gọi để gán t.x = 5
dường như tạo ra một tài sản mới x
, và bây giờ getter không hoạt động!
Tôi đang thiếu gì?
Hãy Đặt tên cho lớp học với một chữ in hoa văn. bạn có thể sử dụng chữ thường cho các biến và các tệp mô-đun. –