__init__에서 속성 세터를 어떻게 호출합니까?
-
12-09-2019 - |
문제
다음과 같은 파이썬 코드가 있습니다.
import hashlib
class User:
def _set_password(self, value):
self._password = hashlib.sha1(value).hexdigest()
def _get_password(self):
return self._password
password = property(
fset = _set_password,
fget = _get_password)
def __init__(self, user_name, password):
self.password = password
u = User("bob", "password1")
print(u.password)
이것은 이론적으로 비밀번호의 SHA1을 인쇄해야하지만 생성자에서 self.password를 설정하면 정의 된 속성을 무시하고 값을 "password1"으로 설정합니다. 그런 다음 "password1"의 값은 인쇄 문에 의해 읽습니다.
나는 이것이 클래스에서 정의되는 비밀번호에 대한 내용이라는 것을 알고 있지만 인스턴스에 비해 올바르게 표현하는 방법을 잘 모르겠습니다. 모든 도움이 감사하겠습니다.
해결책
속성은 설명 자이며 디스크립터는 새로운 스타일 클래스에서만 작동합니다. 노력하다:
class User(object): ...
대신에:
class User: ...
디스크립터에 대한 좋은 안내서를 찾을 수 있습니다 여기.
제휴하지 않습니다 StackOverflow