그래서 파이썬 2.6에서 데코레이터를 가지고 놀고 있어요. 나는이 의미 무슨 생각을파이썬에서 @ foo.setter가 작동하지 않는 이유는 무엇입니까?
class testDec:
@property
def x(self):
print 'called getter'
return self._x
@x.setter
def x(self, value):
print 'called setter'
self._x = value
는 속성처럼 x
을 치료하지만, get 및 set에 이러한 함수를 호출하는 것입니다 : 여기 내 클래스 파일입니다. 그래서, 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
분명히 첫 번째 호출이 작동합니다. 알았어, 알았어. 그러나 t.x = 5
을 할당하는 호출은 새 속성 x
을 만드는 것으로 보이며 이제는 getter가 작동하지 않습니다!
무엇이 누락 되었습니까?
class testDec(object):
....
는 그 다음 작동합니다 :
는 대문자로 클래스의 이름을 지정하십시오. 변수 및 모듈 파일에 소문자를 사용할 수 있습니다. –